Как избежать уязвимостей XSS в ASP.Net(MVC)?
Недавно я заметил, что у меня была большая дыра в моем приложении, потому что я сделал что-то вроде:
<input type="text" value="<%= value%>" />
Я знаю, что я должен был использовать Html.Encode
, но есть ли способ сделать это для всех значений, не делая этого явно?
Ответы
Ответ 1
Есть несколько способов:
- Используйте синтаксис
<%: %>
в ASP.NET MVC2/.NET 4.0. (Это всего лишь синтаксический сахар для Html.Encode()
)
- Следуйте инструкциям изложенным Филом Хааком, где подробно описывается использование библиотеки Anti-XSS в качестве механизма кодирования по умолчанию для ASP.NET.
Ответ 2
Смотрите этот видео от Скотта Гензельмана и Фила Хаака. Они охватывают XSS, CSRF, JSON Hijacking специально с ASP.Net MVC.
Ответ 3
В ASP.Net 4.0 или новее всегда используйте <%:...% > вместо <% =...% > ... он кодирует HTML.
объяснение Скотта.
Сделав это, довольно просто выполнить grep ваш код для <% = регулярно в качестве меры предосторожности.
Кроме того, используете ли вы Microsoft Anti-XSS library?
Ответ 4
Синтаксис для кодирования HTML
-
<%: model.something% > синтаксис в WebForms
-
Автоматически в Razor i.e. @model.something автоматически будет автоматически кодироваться no
нужно что-то сделать для кодирования.
-
Методы MVC3 HTML Helper автоматически возвращают закодированную строку. например Html.Label вернет закодированную строку
Подробнее о скриптах с несколькими сайтами
http://thirum.wordpress.com/2013/10/24/how-asp-net-mvc-prevents-cross-site-scriptingxss-attack/
Ответ 5
Потенциально опасные HTML-теги:
Не являясь исчерпывающим списком, следующие широко используемые теги HTML могут позволить злоумышленнику вводить код script:
<applet>
<body>
<embed>
<frame>
<script>
<frameset>
<html>
<iframe>
<img>
<style>
<layer>
<link>
<ilayer>
<meta>
<object>
Злоумышленник может использовать атрибуты HTML, такие как src, lowsrc, style и href, в сочетании с предыдущими тегами для внедрения межсайтового скриптинга. Например, атрибут src тега может быть источником инъекции, как показано в следующих примерах.
<img src="javascript:alert('hello');">
<img src="java
script:alert('hello');">
<img src="java
script:alert('hello');">
Злоумышленник также может использовать тег для ввода script, изменив тип MIME, как показано ниже.
<style TYPE="text/javascript">
alert('hello');
</style>