Достаточно ли PagesSection.ValidateRequest для предотвращения XSS в asp.Net - PullRequest
5 голосов
/ 16 марта 2012

В asp.net достаточно метода PagesSection.ValidateRequest, чтобы предотвратить все атаки XSS, или есть что-то еще, что нужно сделать?

Может кто-нибудь указать мне более подробный ресурс по этой теме специально дляasp.net, поскольку Google в основном возвращает статьи MSDN, и я хотел бы убедиться, что мы делаем достаточно.

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Вот один пример: HttpRequestValidationException и межсайтовый скриптинг XSS

Проверка запроса просто пытается остановить запросы, содержащие очень маленький набор плохих букв. И этого недостаточно, чтобы остановить XSS, поскольку есть несколько примеров XSS, которые выходят за пределы этого набора букв. Одним из таких примеров является выпрыгивание из существующего атрибута html в новый:

<input type="text" value="BAD_DATA">

Если BAD_DATA равен " autofocus onfocus="alert(1), это становится

<input type="text" value="" autofocus onfocus="alert(1)">

, который откроет окно с предупреждением.

Таким образом, хотя проверка запроса остановит простые XSS-атаки, она не остановит все. Я также видел необходимость отключить его в формах входа в систему, поскольку он будет отклонять пользователей, имеющих <в своем пароле. </p>

2 голосов
/ 17 марта 2012

AntiXSS Library

Microsoft AntiXSS Library является хорошим решением для ASP.Net.Он использует подход белого (против черного) списка и, кажется, регулярно обновляется Microsoft.

Последние загрузки (на момент публикации): http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=28589

AntiXSS поддерживает как текст, так и HTML-стильПроверка.Проверка HTML разрешает содержимое, которое может быть нежелательным (например, изображения в другом домене).

Требуется, чтобы вы вводили каждое из ваших входных значений через библиотеку, что приведет к дополнительному (хотя и простому) коду.1012 *

using System;
using Microsoft.Security.Application;

public class AppText
{
    public static string GetSafeHtml( string inputText )
    {
        return Sanitizer.GetSafeHtmlFragment( inputText );
    }

    public static string GetSafeText( string inputText )
    {
        return Microsoft.Security.Application.Encoder.HtmlEncode( inputText );
    }
}

Преимущества

Ручная проверка каждого ввода гарантирует, что вы не предполагаете, что безопасность просто «обрабатывается» проверкой запроса ASP.Net.Это также дает вам возможность отключить проверку запроса, если это необходимо (существуют допустимые случаи для сомнительных символов в запросе).Поскольку вы явно проверяете ввод с помощью библиотеки AntiXSS, вы можете разрешить символы / разметку в запросе.

Общая информация XSS

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...