1.WebForm

先看如下 web.config 的代码:

<system.web>
<compilation debug="true" targetFramework="4.0"/>
<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false"></pages>
</system.web>

validateRequest 这句我们知道是关闭验证,也就是说提交带标签,比如 <strong>粗体</strong> 这样的值时,ASP.NET 不会报错。

但在 4.0 中还多了一个 requestValidationMode,这是什么意思呢?

requestValidationMode 有两个值:

  • 2.0仅对网页启用请求验证。是启用还是关闭取决于 validateRequest。
  • 4.0 默认值。任何 HTTP 请求都会启用请求验证,也就是说不光是网页,还包括 Cookie 等。此时强制启用,不管 validateRequest 为何值。

由于 requestValidationMode="4.0" 是强制启用,所以我们会发现在 .NET Framework 4.0 中仅靠设置 validateRequest 是关闭不了请求验证的,还得将 requestValidationMode 设置为 2.0。

ASP.NET中的请求验证特性提供了某一等级的保护措施防止XSS攻击,之前版本的ASP.NET的请求验证是默认启动的,但是他紧紧应用于ASP.NET页面中(.aspx文件和.aspx.cs文件)。

而在ASP.NET4中,请求验证默认对所有类型的请求启动,因为它在BeginRequest被调用之前启动,结果就是对所有资源的请求都要经过请求验证,而不仅仅在.aspx文件和他们的类文件中,甚至包括web service和自定义的httphandler。同样,在自定义httpmodules读取http请求的时候,同样要经过请求验证。

上述原因引发的最终结果就是在ASP.NET4中会引发请求错误,例如检测到有潜在危险的Request.Form值等等,为了解决这个问题,可以通过将验证模式设置为ASP.NET之前的版本。具体步骤是在web.config中加入以下配置:

<httpRuntime requestValidationMode=”2.0″ />

设置了请求模式后,再设置

<system.web>
<pages validaterequest=”false”/>
</system.web>

2.MVC框架中,在控制方法前加入:

[ValidateInput(false)]属性。

那么就可以禁止请求验证了。但是这会引发安全问题,对安全问题的讨论请看这里:点击这里查看

另外还有一种方法就是实现自己的请求验证类,首先需要在web.config中指定请求验证类类型:

<httpRuntime requestValidationType=”Globals.CustomRequestValidation”/>

然后实现自己的请求验证类,这个类必须从RequestValidator类中继承,具体代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Util;
namespace Globals
{
/// <summary>
/// Summary description for CustomRequestValidation
/// </summary>
public class CustomRequestValidation : RequestValidator
{
public CustomRequestValidation() { }
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, outint validationFailureIndex)
{
//block script tags
var idx = value.ToLower().IndexOf(“<script”);
if (idx > -)
{
validationFailureIndex = idx;
return false;
}
else
{
validationFailureIndex = ;
return true;
}
}
}
}

IsValidRequestString函数返回true则验证通过,否则验证失败,还会出现文章开头所说的错误消息。

此请求验证类当检测到<script>标签时就会出现错误,防止脚本注入攻击等等。

最新文章

  1. docker-compose启动的tomcat无法远程连接jmx
  2. Python学习路程day21
  3. 利用命令行将项目传到github上的简单操作
  4. 即时通信系统中如何实现:聊天消息加密,让通信更安全? 【低调赠送:QQ高仿版GG 4.5 最新源码】
  5. AI (Adobe Illustrator)详细用法(三)
  6. html 中添加背景音乐
  7. ECSHOP二次开发指南
  8. 中科院 2014年GCT考前辅导课程安排
  9. java面板
  10. 原生Javascript实现控制DIV属性
  11. WPF - 为什么不能往Library的工程中添加WPF window
  12. MongoDB的基本操作(一)
  13. MySQL数据备份方法
  14. 带着萌新看springboot源码13(手写一个自己的starter)
  15. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1) C.Producing Snow
  16. Nuxt.js项目实战
  17. C# Winform添加全局快捷键(老板键)
  18. 为什么说Java语言是平台无关的?
  19. 莫烦python课程里面的bug修复;课程爬虫小练习爬百度百科
  20. windows:nginx配置http、https反向代理

热门文章

  1. PHP session 跨子域问题总结
  2. 公司项目笔记-导出excel
  3. 怎样给win7系统硬盘分区
  4. 看到的一些js小知识
  5. Spark IDEA开发环境构建
  6. jquery插件编写
  7. c链表结点的删除和添加
  8. 【Git】代码托管-从基本设置开始
  9. Effective Java设定游戏 - 就是爱Java
  10. Tea加密算法和XxTea加密算法