В стандартных приложениях ASP.net ASP.net предлагает некоторую защиту от XSS-атак с помощью функции validateRequest, которая обнаруживает опасные ошибки ввода, если кто-то пытается это сделать. Кажется, эта функциональность была удалена из MVC. Не знаете, почему?





Это трудный рубеж. Является ли ваше веб-приложение просто веб-ресурсом RESTful, каким оно должно быть? Или он пытается сделать больше. Следующее, что вы знаете, у вас есть 100 скрытых полей ввода: __VIEWSTATE, __EVENTTARGET, __EVENTARGUMENT и т. д. И т. Д.
Как вы знаете, вы все еще можете предотвратить атаки XSS в MVC. Просто поищи в Гугле, чтобы увидеть несколько примеров. Но причина в том, что MVC - это другой, «более чистый» тип веб-приложения.
Обновлено: Я не знаю, ясно ли то, что я сказал выше. Но идея в том, что MVC не будет пытаться быть чем-то большим, чем он есть (как это делает ASP.NET). У них обоих есть свои сильные стороны и причины.
Я надеюсь, что у вас есть что-то более надежное, чем ValidateRequest, чтобы в любом случае избежать XSS.
Более полезно предлагать альтернативы, чем просто отвергать подход.
Неужели ValidateRequest настолько плох? Я гарантирую, что кодирую любой HTML-код, введенный пользователем, но меня интересует, какой подход вы используете?
«Магия» - это плохо. Если вы не понимаете уязвимости своего приложения и не понимаете, как им противостоять, то полагаться на других людей, чтобы сделать ваше приложение безопасным, опасно. Это дыра в вашем понимании, которую нужно обучать, а не заклеивать обоями.
Кстати, это бесконечный процесс. Я сам больше узнаю об этом. Мысль о том, что существуют серьезные уязвимости, которых я не понимаю, пугает меня, и она должна напугать любого программиста ...
geek_in_belgium у вас есть пример, который обходит встроенные функции asp.net?
alexmac: попробуйте поставить перед именем формы префикс __ (2 символа подчеркивания): проверка будет пропущена.
Я считаю решение ValidateRequest хакерским. На мой взгляд, «предотвращение XSS» - это бизнес-правило; поэтому позвольте модели справиться с ситуацией.
Мне очень нравится объяснение, касающееся желания лучше следовать принципам REST. Что касается 100 скрытых полей, это напоминает мне решение ASP, которое я предоставил несколько лет назад; Я использовал множество скрытых полей для переноса метаданных. Не очень.
Я знаю, что это старый вопрос, но я думал, что все равно смогу на него ответить.
Существует атрибут фильтра действия ValidateInput, который можно добавить к действиям.
[ValidateInput(true)]
public ActionResult Foo()
{
}
Вы также можете использовать атрибут AllowHtml в свойствах модели.
public class MyModel
{
public Guid ID { get; set; }
[AllowHtml]
public string SomeStringValue { get; set; }
}
Добавлено упоминание о AllowHtmlAttribute.
Спасибо, Тимоти, я не имею в виду какой-то конкретный веб-сайт. Я думаю, что проверка запроса по-прежнему соответствует restfulnature, поскольку он мешает запросу до тех пор, пока он не будет получен, и только в том случае, если он потенциально опасен. Какой подход вы используете с xss?