У меня есть строка, которая может содержать небезопасный HTML. Я хочу избежать тегов в строке, меняя <script>
на <script>
Как избежать строки для HTML?
Как я могу сделать это с помощью дротика?
У меня есть строка, которая может содержать небезопасный HTML. Я хочу избежать тегов в строке, меняя <script>
на <script>
Как избежать строки для HTML?
Как я могу сделать это с помощью дротика?
Использовать HtmlEscape от dart:convert
.
import 'dart:convert' show HtmlEscape;
void main() {
var unsafe = 'Hello <script>world</script>';
var sanitizer = const HtmlEscape();
print(sanitizer.convert(unsafe));
}
Вышеприведенное печатает приложение:
поведенияHello <script>world</script>
по умолчанию является бежать апостроф, больше чем/меньше чем, цитат, и косых.
Если вы хотите контролировать, что скрывается, вы можете создать новый HtmlEscape
с HtmlEscapeMode.
Например, чтобы избежать только больше чем/меньше чем и косые, попробуйте следующее:
var sanitizer = const HtmlEscape(HtmlEscapeMode.ELEMENT);
Помните, Dart автоматически дезинфицирует строки, прежде чем они попадают в HTML. Таким образом, вам может не понадобиться вручную скрывать скрипт HTML. Если вы вызываете element.setInnerHtml
с небезопасной строкой, он будет подвергнут санитарной обработке.
И что будет наоборот: проанализировать строку, содержащую объекты HTML, и получить чистую строку? Кажется, что это не реализовано: https://code.google.com/p/dart/source/browse/branches/1.6/dart/sdk/lib/convert/html_escape.dart –
** Тот факт, что Element.setInnerHtml дезинфицирует по умолчанию, как правило, не означает, что вам не нужно выводить вывод. ** Дезинфицирующее средство (надеюсь) защитит вас от XSS _if_, вы забудете избежать выхода, но все равно будете генерировать неверный результат. Вам все равно нужно бежать за правильным поведением; дезинфицирующее средство является защитной сетью. Также стоит отметить: вы можете заменить дезинфицирующее средство валидатором, что приведет к ошибке, а не к молчанию при работе с выходом. Это может быть желательно, так как оно будет а) предупреждать вас об ошибке в вашей программе и b) не делает очевидным, что вы забыли побег. – ngroot