Asp.net 更强大的请求验证器
我最近了解并测试了以下xss攻击可以针对我的站点发起- 在fiddle composer中,更改POST请求,以便任何文本字段都包含以下内容:Asp.net 更强大的请求验证器,asp.net,asp.net-4.0,Asp.net,Asp.net 4.0,我最近了解并测试了以下xss攻击可以针对我的站点发起- 在fiddle composer中,更改POST请求,以便任何文本字段都包含以下内容: <%u0008script>alert(1);<%u0008/script> 警报(1); 任何包含此值(未编码)的标签都将执行警报(1)。正确的解决方案总是正确编码所有输出。但我也修改了RequestValidator: protected override bool IsValidRequestString(HttpCon
<%u0008script>alert(1);<%u0008/script>
警报(1);
任何包含此值(未编码)的标签都将执行警报(1)。正确的解决方案总是正确编码所有输出。但我也修改了RequestValidator:
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) {
if (requestValidationSource == RequestValidationSource.Form) {
if (value.IndexOf("<\bscript") >= 0) {
validationFailureIndex = -1;
return false;
}
}
return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
}
protectedoverride bool IsValidRequestString(HttpContext上下文、字符串值、RequestValidationSource RequestValidationSource、string collectionKey、out int validationFailureIndex){
if(requestValidationSource==requestValidationSource.Form){
添加了if(value.IndexOf(“.NET 4.5”),它可以防止此类攻击,并可以通过只允许安全字符来替换HtmlEncode等的默认实现。HtmlEncode的字符列表显示在方法的
请注意,您遇到的不是请求验证问题,更不用说.NET中的错误了。在您的案例中无效的输入可能在另一个场景中是有效的输入,例如像SO这样的论坛帖子编辑器
实际问题是内容编码问题:内容没有以安全的方式呈现,这会阻止浏览器将其解释为脚本。这正是我们(ASP.NET团队)的原因之一正在逐步减少请求验证,并最终将其从产品中删除。10年前引入时,它可能很好,但在2014年,它不足以阻止真实世界的XSS攻击。相反,开发人员应根据其业务逻辑验证所有输入,并以适当的方式对所有输出进行编码对于底层传输来说是安全的。有关更多信息,请参阅。@frenchie纯HtmlEncode无法防止XSS攻击。