在asp.net中,PagesSection.ValidateRequest方法足以阻止所有XSS攻击,还是需要做更多的事情?
任何人都可以向我指出一个专门针对asp.net的更全面的资源,因为Google主要返回MSDN文章,我想验证我们做得不够。
答案 0 :(得分:3)
以下是一个示例:HttpRequestValidationException and cross-site scripting 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攻击,但它不会停止所有。我还看到需要在登录表单上关闭它,因为它会拒绝具有&lt;在他们的密码。
答案 1 :(得分:2)
Microsoft AntiXSS library是ASP.Net的一个很好的解决方案。它使用白名单(黑名单)方法,似乎由Microsoft定期更新。
最新下载(截至本文):http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=28589
AntiXSS支持文本和HTML样式验证。 HTML验证确实允许可能不合需要的内容(例如另一个域中的图像)。
它要求您通过库运行每个输入值,这将产生额外的(虽然简单)代码。
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库显式验证输入,所以您可以在请求中允许字符/标记。
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet