Как вы разрешаете использование <img>при предотвращении XSS? - PullRequest
1 голос
/ 21 сентября 2008

Я использую веб-формы ASP.NET для комментариев в стиле блога.

Редактировать 1: Это выглядит намного сложнее, чем я думал. Как вы фильтруете src?
Я бы предпочел по-прежнему использовать настоящие html-теги, но если все так усложнилось, я мог бы пойти своим путем. Я еще не сделал XML, так что мне нужно больше узнать об этом?

Ответы [ 4 ]

3 голосов
/ 21 сентября 2008

Если IMG - единственное, что вы разрешаете, я бы предложил вам использовать простой синтаксис в квадратных скобках, чтобы разрешить это. Это устранит необходимость в синтаксическом анализаторе и уменьшит нагрузку на другие опасные крайние случаи вместе с синтаксическим анализатором. Скажем, что-то вроде:

Look at this! [http://a.b.c/m.jpg]

Что будет преобразовано в

Look at this! <img src="http://a.b.c/m.jpg" />

Вам следует отфильтровать адрес SRC, чтобы в части SRC не передавались вредоносные объекты. Как может быть

Look at this! [javascript:alert('pwned!')]
1 голос
/ 21 сентября 2008

Используйте синтаксический анализатор XML для проверки вашего ввода и отбросьте или закодируйте все элементы и атрибуты, которые вы не хотите разрешать. В этом случае удалите или закодируйте все теги, кроме <img><code> tag, and all attributes from that except <code>src, alt и заголовка .

0 голосов
/ 21 сентября 2008

@ Чакрит предложил использовать собственный синтаксис, например, URL в скобках - это может быть лучшим решением. Вы ОПРЕДЕЛЕННО не хотите начинать возиться с разбором и т. Д.
Просто убедитесь, что вы правильно закодировали весь комментарий (в зависимости от контекста - см. Мой ответ по этому вопросу здесь Будет ли кодирование HTML предотвращать все виды атак XSS? )
(кстати, я только что обнаружил хороший пример нестандартного синтаксиса ... ;-))

Как уже упоминалось, ограничьте расширение файла jpg / gif / etc - даже если это можно обойти, а также ограничьте протокол (например, http://).

Другая проблема, которую следует рассмотреть помимо XSS, - это CSRF (http://www.owasp.org/index.php/Cross-Site_Request_Forgery).. Если вы не знакомы с этой проблемой безопасности, это в основном позволяет злоумышленнику заставить мой браузер отправить действительный аутентифицированный запрос в ваше приложение, например, чтобы перевести деньги или изменить мой пароль. Если он размещен на вашем сайте, он может анонимно атаковать любое уязвимое приложение - , включая ваше . (Обратите внимание, что даже если другие приложения уязвимы, это не ваша вина на них нападают, но вы все равно не хотите быть узлом эксплойтов или источником атаки ...). Что касается вашего собственного сайта, злоумышленнику гораздо проще изменить пароль пользователя на вашем сайте, экземпляр.

0 голосов
/ 21 сентября 2008

Если вы в конечном итоге перейдете на формат, отличный от HTML (что облегчает задачу, поскольку вы можете буквально избежать всего HTML), используйте стандартный синтаксис, такой как markdown . Синтаксис уцененного изображения равен ![alt text](/path/to/image.jpg)

Есть и другие, такие как Текстиль . Его синтаксис для изображений !imageurl!

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