Предотвращение XSS (межсайтовый скриптинг) - PullRequest
9 голосов
/ 15 января 2009

Допустим, у меня есть простое приложение для блога ASP.NET MVC, и я хочу, чтобы читатели могли добавлять комментарии к записи в блоге. Если я хочу предотвратить любые типы XSS-махинаций, я мог бы HTML-кодировать все комментарии, чтобы они стали безвредными при визуализации. Однако, что если я захочу некоторые базовые функции, такие как гиперссылки, жирный шрифт, курсив и т. Д.?

Я знаю, что StackOverflow использует Редактор разметки ОМУ , который кажется отличным выбором для того, чего я пытаюсь достичь, если бы не тот факт, что он поддерживает оба HTML и Markdown, который оставляет его открытым для атак XSS .

Ответы [ 7 ]

8 голосов
/ 15 января 2009

Если вы не хотите использовать редактор, вы можете рассмотреть AntiSamy в OWASP .

Вы можете запустить пример здесь: http://www.antisamy.net/

3 голосов
/ 15 января 2009

Сколько HTML вы собираетесь поддерживать? Просто жирный / курсив / основные вещи? В этом случае вы можете преобразовать их в синтаксис уценки и затем удалить оставшуюся часть HTML.

Разбор должен быть выполнен на стороне сервера, прежде чем вы сохраните его. Вам также необходимо проверить входные данные на сервере при проверке SQL-уязвимостей и других нежелательных вещей.

2 голосов
/ 16 января 2009

Если вам нужно сделать это в браузере: http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

1 голос
/ 15 января 2009

Я бы проголосовал за FCKEditor , но вам нужно сделать дополнительные шаги для возвращенного результата тоже .

1 голос
/ 15 января 2009

Почему вы не используете код Джеффа? http://refactormycode.com/codes/333-sanitize-html

1 голос
/ 15 января 2009

Я бы посоветовал вам предоставить только синтаксис уценки. На внешнем интерфейсе клиент может ввести разметку и иметь предварительный просмотр HTML (такой же, как SO), но только отправлять синтаксис разметки на стороне сервера. Затем вы можете проверить его, сгенерировать HTML, экранировать и сохранить.

Я верю, что большинство из нас так поступают. В любом случае, уценка предназначена для того, чтобы облегчить кому-либо написание структурированного HTML-кода и дать власть тем, кто даже не знает, как это сделать.

Если есть что-то конкретное, что вы хотели бы сделать с HTML, то вы можете настроить его с помощью некоторого наследования CSS '.comment a {color: # F0F; } ', передний конец JS или просто перейдите по сгенерированному HTML от разбора уценки перед сохранением.

0 голосов
/ 15 января 2009

Вы можете использовать белый список HTML, чтобы можно было использовать определенные теги, но все остальное заблокировано.

Есть инструменты, которые могут сделать это для вас. SO использует код , который Slough связан .

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