请慎用ASP.Net的validateRequest=”false”属性

请慎用ASP.Net的validateRequest=”false”属性阅读全文下载代码:http://www.cckan.net/forum.php?mod=viewthread&tid=74在客户端的文体框里输入“例如”等字符的时候为出现这样的错误序安全的尝试,如跨站点的脚本攻击。通过在Page指令或配置节中设置validateRequest=false可以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。 异常

大家好,又见面了,我是你们的朋友全栈君。

阅读全文下载代码:http://www.cckan.net/forum.php?mod=viewthread&tid=74

在客户端的文体框里输入“<任何字符>例如<user>”等字符的时候为出现这样的错误

序安全的尝试,如跨站点的脚本攻击。通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。 

异常详细信息: System.Web.HttpRequestValidationException: 从客户端(txtName=”<fd>”)中检测到有潜在危险的 Request.Form 值。

这是没有设置<pages validateRequest =”true”>这个属性这是默认的,当我们改为false的时候这样的错误就不会出现了,但是我们不能只是这样改,这样虽说是没有错了, 但是你有没有想过程序也就不安全了啊,

正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asaxApplication_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。

 

请慎用ASP.Net的validateRequest="false"属性

  protected void Page_Error(object sender, EventArgs e)
    {

            Exception ex 
= Server.GetLastError();
            
if (ex is HttpRequestValidationException)
            {

                Response.Write(
请不要输入这样的字符,呵呵);

                Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
            }
    }

 

这是ASP.Net提供的一个很重要的安全特性。因为很多程序员对安全没有概念,甚至都不知道XSS这种攻击的存在,知道主动去防护的就更少了。ASP.Net在这一点上做到默认安全。这样让对安全不是很了解的程序员依旧可以写出有一定安全防护能力的网站。

  但是,当我Google搜索 HttpRequestValidationException 或者 “A potentially dangerous Request.Form value was detected from the client”的时候,惊奇的发现大部分人给出的解决方案竟然是在ASP.Net页面描述中通过设置 validateRequest=false 来禁用这个特性,而不去关心那个程序员的网站是否真的不需要这个特性。看得我这叫一个胆战心惊。安全意识应该时时刻刻在每一个程序员的心里,不管你对安全的概念了解多少,一个主动的意识在脑子里,你的站点就会安全很多。

  为什么很多程序员想要禁止 validateRequest 呢?有一部分是真的需要用户输入”<>”之类的字符。这就不必说了。还有一部分其实并不是用户允许输入那些容易引起XSS的字符,而是讨厌这种报错的形式,毕竟一大段英文加上一个ASP.Net典型异常错误信息,显得这个站点出错了,而不是用户输入了非法的字符,可是自己又不知道怎么不让它报错,自己来处理报错。

  对于希望很好的处理这个错误信息,而不使用默认ASP.Net异常报错信息的程序员们,你们不要禁用validateRequest=false。

 例子 http://www.cckan.net/forum.php?mod=viewthread&tid=73

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132849.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 微信h5支付,微信外浏览器支付实现

    微信h5支付,微信外浏览器支付实现2021-02-07修改看一下官方文档还是很必要的,知道必不可少的参数是什么:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1下面按步骤跟着我做首先需要APPID,微信支付商户号mch_id,API密钥key,Appsecret(secret),说明在这里https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=3_1 然后设置支付域名,设置路径:商户平

  • php递归算法经典实例_一文读懂递归算法

    php递归算法经典实例_一文读懂递归算法本篇文章主要介绍PHP递归算法详解,感兴趣的朋友参考下,希望对大家有所帮助。遇到需要设计树节点的数据库结构,以及需要读出来的树节点数据结构!大家是否会选择用数据库的查询方式来获取树结构呢?//曾经的数据库查询获取方式$res=$this->db->query(“select*frommenuwherepid=0”);foreach($resas$k=>$v)…

  • lr模型训练_GBDT模型

    lr模型训练_GBDT模型分类模型本质上是线性回归模型优化目标J(θ)=∑−yilog(h(θTxi))−(1−yi)log(1−h(θTxi))J(\theta)=\sum-y_ilog(h(\theta^Tx_i))-(1-y_i)log(1-h(\theta^Tx_i))J(θ)=∑−yi​log(h(θTxi​))−(1−yi​)log(1−h(θTxi​)),最小化其中h(θTx)=11+e−θ…

  • springBoot笔记(一)「建议收藏」

    springBoot笔记(一)「建议收藏」1、直接在application.properties中写端口 server.port=8081server.servlet.context-path=/luck2、在resources包下创建application.yml 将配置文件写在里面 server: port: 8082 servlet: context-path: /lu…

  • 鞍点[通俗易懂]

    鞍点[通俗易懂]关于“鞍点”的说法网上讲的乱七八糟,因此我特…

  • 局域网广域网区别_局域网和广域网的简称

    局域网广域网区别_局域网和广域网的简称一、局域网 局域网(LocalAreaNetwork),简称LAN,是指在某一区域内由多台计算机互联成的计算机组。“某一区域”指的是同一办公室、同一建筑物、同一公司和同一学校等,一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号