System.Web.HttpRequestValidationException: 从客户端(name="<a href=''>我是晓菜鸟</a>")中检测到有潜在危险的 Request.Form 值
这是一个比较常见的问题了,如果Web表单中有输入类似于 Html 标签之类的文本,在通过 Request.QueryString 或者 Request.Form 传递这些值的时候,就会触发这样的异常,出于脚本注入等安全性考虑,这也是合情合理的。
先简单的说说 Request.QueryString 和 Request.Form 吧,
Request.QueryString(取得地址栏参数值),获取地址栏中的参数,意思就是取得 Url ”?"号后面的参数值.如果参数有多个就用 ”&” 符号连接起来。
取值:Request.QueryString["Url地址栏中的参数名称"]
Request.Form(取得表单参数值),获取提交的Form中的元素的值。
取值:Request.Form["表单元素的name属性名称"]
一般情况下,程序应尽量过滤掉,或者禁止表单上类似文本的输入,如果业务上非得有这样的要求,需要输入标签性的文本,可以考虑在数据向服务器端传递前,将一些敏感字符按照约定规则替换掉,向客户端输出时,再还原出原始文本。比如把 "<" 替换成 "<",向客户端输出时,再把"<" 替换成 "<"。
以上是个人认为比较正确的做法,当然就解决眼前问题而言,如果是Asp.Net WebForm应用程序,就是在 aspx 文件的 page 指令上添加 ValidateRequest=false 属性值,这是对单一表单的做法,要想作用于更广泛的Web表单,自然是在 webconfig 文件中做相同的设置。
另外,如果是Asp.Net MVC应用程序,
Framework4.0:
则需要在webconfig文件的 <system.web> 配置节中加上 <httpRuntime requestValidationMode="2.0"></httpRuntime> 配置(如果已存在 <httpRuntime /> 节点,只需在其中添加属性 requestValidationMode="2.0" 。),之后,再在 Controller(作用于整个控制器) 或者 Action(作用于单个方法) 头上添加 [ValidateInput(false)] 的标识,区别大家都知道的,作用域不同而已,这里说的 Asp.Net MVC 是基于 Framework4.0 的环境的,Framework3.5 下没试过,想来差不多。
Framework4.5:
其实 Framework4.5 下也差不多,只不过 VS 自动生成的 webconfig 配置文件中的 <httpRuntime /> 节点中添加了 Framework 的版本号而已,用法一样,只需在其中添加属性 requestValidationMode="2.0"(<httpRuntime targetFramework="4.5" requestValidationMode="2.0"/>),之后,再在 Controller(作用于整个控制器) 或者 Action(作用于单个方法) 头上添加 [ValidateInput(false)] 的标识即可。
最新文章
- SpringMVC 入门
- 例子:Execution Model Sample - 应用状态保存
- 转- android硬件传感器
- ASP.NET Web API 配置返回的json字段的格式以及Action返回HttpResponseMessage类型和IHttpActionResult类型
- php数组转换成json格式。
- memcached完全剖析系列——一、memcached基础
- Codeforces Round #198 (Div. 2)
- Linux-remote change password (more)
- 玩耍Hibernate系列(二)--基础知识
- 归档 NSKeyedArchiver
- 安装oracle 12c遇到问题
- configure: error: zlib library and headers are required
- 什么是xsi:type ???
- Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例
- Java中抽象类和接口区别
- Python基础之常用模块(三)
- 201521123016《java程序设计》第4周学习总结
- 疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN
- docker修改默认存储位置
- 树&#183;二叉查找树ADT(二叉搜索树/排序树)