Использование проверки запроса для запросов ajax?

#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-код, не является хорошим подходом. Смотрите Ссылку ниже:

XSS (межсайтовый скриптинг) Шпаргалка

Комментарии:

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

2. Я просто говорю вам, что если вы попытаетесь проанализировать HTML только для удаления тегов скрипта, вы столкнетесь с проблемами, и ваше решение не остановит обычные атаки XSS. Есть причина ASP.NET MVC кодирует все выходные данные по умолчанию. 🙂