Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 更强大的请求验证器_Asp.net_Asp.net 4.0 - Fatal编程技术网

Asp.net 更强大的请求验证器

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

我最近了解并测试了以下xss攻击可以针对我的站点发起- 在fiddle composer中,更改POST请求,以便任何文本字段都包含以下内容:

<%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攻击。