В C #, как предотвратить XSS при разрешении ввода HTML, в том числе br? - PullRequest
0 голосов
/ 23 декабря 2011

Я уже некоторое время использую библиотеку MS AntiXSS . Недавно я решил изменить текстовые области на своем сайте, чтобы они были обычными текстовыми областями (раньше это был WYSIWYG), и запустил преобразование на новых строках в br.

Проблема в том, что библиотека MS AntiXSS не поддерживает это ... она удаляет BR. Я не хочу, чтобы запись пользователя шла прямо в мою БД без проверки. Без использования библиотеки MS AntiXSS, какой надежный способ предотвратить XSS при разрешении ввода HTML, включая br (в C #)?

Ответы [ 3 ]

1 голос
/ 26 декабря 2011

Вы можете отключить ваш AntiXSS для этого поля и сохранить непосредственно данные пользователя в вашей базе данных. Таким образом, вы сможете отображать этот текст на любом выходе, а не только в HTML.

Теперь, когда вы хотите отобразить этот текст на HTML-странице с помощью ASP MVC Razor, вы можете использовать что-то вроде этого:

@Html.Encode(Model.MyMultilineTextField).Replace(@"\n", "<br />")

Html.Encode закодирует текст, поэтому теги Html не будут интерпретироваться и XSS невозможен. Вы можете добавить метод расширения в Html, который выполняет преобразование (заменяет) для вас. Вы также можете обращаться с \ r.

0 голосов
/ 01 января 2012

Чтобы решить эту проблему, я решил сохранить исходный HTML-код как есть, выполнив замену Environment.Newlines на <br /> перед сохранением.

Затем, с другой стороны, при показе его посетителям.Я использую код MS AntiXSS, чтобы очистить его.Не на 100% идеальный способ, которым я хотел бы сделать это, но выполняет свою работу.

Я немного кеширую здесь, чтобы убедиться, что он не работает через AntiXSS при каждом запросе.

0 голосов
/ 23 декабря 2011

Можно ли получить копию вывода AntiXSS? Если это так, выполните ввод через AntiXSS, а затем сделайте замену
и сохраните данные самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...