2008-09-21 2 views
1

Я использую ASP.NET Web Forms для комментариев в стиле блога.Как вы разрешаете использование <img> при предотвращении XSS?

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

ответ

1

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

+0

Также не следует указывать URL-адреса, которые не начинаются с http: // (особенно javascript :) – rpetrich 2008-09-21 04:09:33

3

Если 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!')] 
+0

Ограничение расширений изображений на самом деле не очень помогает, поскольку вы можете просто настроить переадресацию на сервере и браузер загружает любой URL, который вы хотите в любом случае.Но да, я согласен, использование какого-то альтернативного синтаксиса кажется гораздо лучшей идеей, чем борьба с санацией HTML для чего-то подобного. – 2008-09-21 05:17:32

0

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

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

0

@chakrit предложил использовать пользовательский синтаксис, например. скопированные URL-адреса - это может быть наилучшим решением. Вы ОБЯЗАТЕЛЬНО не хотите, чтобы начать баловаться с разбором и т.д.
Просто убедитесь, что вы правильно закодировать весь комментарий (в зависимости от контекста - см моего ответа на это здесь Will HTML Encoding prevent all kinds of XSS attacks?)
(кстати, я только что обнаружил хороший пример обычая синтаксис прямо там ... ;-))

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

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