#c# #asp.net #xss
#c# #asp.net #xss
Вопрос:
У пользователей на моем сайте есть страница, на которую они могут написать свой собственный html. Я хочу, чтобы это использовалось для таких вещей, как упорядоченные списки, стиль и т. Д., Но некоторые люди будут пытаться вставить скрипт, чего я не могу допустить.
Механизм обновления описания пользователя осуществляется через ajax. Из javascript я отправляю запрос в файл ajax.ashx
, в котором вызывается функция ajaxMethods.cs
. В функции я обновляю sql server новым описанием пользователя.
Как я могу проверить входные данные в функции перед отправкой описания на сервер? Я хочу убрать все, что связано со сценариями, но оставить обычные теги html, например <p>
. Существуют ли какие-либо инструменты, которые будут обрабатывать все это?
Ответ №1:
Почему бы не разрешить пользователям использовать вместо этого пользовательский формат / язык (например, Markdown), а затем проанализировать эту серверную часть в HTML? Таким образом, вы знаете, что любой скрипт / html-код, который вы найдете в фактическом запросе, недействителен и может быть удален (или закодирован). Это также дает вам преимущество разрешения только предопределенного списка тегов. По сути, это дало бы вам ту же функциональность, что и StackOverflow.
Ответ №2:
Я рекомендую вам HttpServerUtility.HtmlEncode
ваш вывод. Попытка проанализировать теги скрипта, а не HTML-код, не является хорошим подходом. Смотрите Ссылку ниже:
Комментарии:
1. Я не думаю, что можно использовать HtmlEncode, потому что он кодирует все теги, в то время как мне нужно, чтобы некоторые теги оставались, но теги скрипта должны быть удалены.
2. Я просто говорю вам, что если вы попытаетесь проанализировать HTML только для удаления тегов скрипта, вы столкнетесь с проблемами, и ваше решение не остановит обычные атаки XSS. Есть причина ASP.NET MVC кодирует все выходные данные по умолчанию. 🙂