Fork me on GitHub

微软反跨站脚本库3.0 RTM

跨站脚本Cross-Site Scripting(XSS)又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。
跨站脚本Cross-Site Scripting(XSS)是最为流行的Web安全漏洞之一。据统计,2007年,跨站脚本类的安全漏洞的数目已经远远超出传统类型的安全漏洞(http://en.wikipedia.org/wiki/Cross-site_scripting)

虽然在IE8中引入了客户端的XSS过滤器以减少XSS对用户造成的危害,但是XSS本质上是Web应用服务的漏洞,仅仅依赖客户端的保护措施是不够的。解决问题的根本是在Web应用程序的代码中消除XSS安全漏洞。

以下是在Web应用的开发中避免XSS安全漏洞的几个原则:

  • 检查所有产生动态网页的代码
  • 判定动态网页的内容是否包括不安全的输入信息
  • 对输入进行校验
  • 对输出进行编码以过滤特殊字符

采用不同的Web开发工具,实施以上原则的具体步骤也不相同。当需要将一个字符串输出到Web网页时,但又不能完全确定这个字符串是否包括HTML的特殊字符,例如“<,>,&”等等,可以使用编码(HTMLEncode)以过滤这些特殊字符。在ASP.NET中有两种方法:一种是使用HttpUtility,另一种就是使用微软提供的XSS库,最新版本是3.0 ,采用MS-PL协议发布的开源项目,7月14日发布了,下载地址是:http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09&displaylang=en

AntiXss的使用方式与HttpUtility类似:

String Name = AntiXss.HtmlEncode(Request.QueryString["Name"]);

它们最大的区别在于HttpUtility.HtmlEncode采用的是黑名单验证(Black list)方式。即HttpUtility.HtmlEncode仅仅过滤它知道的特殊字符,而允许其它的输入。AntiXss.HtmlEncode采用的白名单验证(White list)方式。它只允许输出它认为合法的字符,而过滤掉其它的所有字符。

两者中,AntiXss.HtmlEncode要更为安全,是推荐的使用手段。

在asp.net 程序中避免 Cross-Site Scripting 攻击的正确方法:

(1) ValidateRequest = true

(2) 对于所有使用者的输入加以编码并检查长度 : Application、Session、Url QueryString、Cookie、HTTP Header、数据库、文件、Form表单(根据输出的区域,使用以下相对应的七种编码方法)

 

XSS Libray 包含如下的方法:

Encoding Method Description
HtmlEncode Encodes input strings for use in HTML
HtmlAttributeEncode Encodes input strings for use in HTML attributes
JavaScriptEncode Encodes input strings for use in JavaScript
UrlEncode Encodes input strings for use in Universal Resource Locators (URLs)
VisualBasicScriptEncode Encodes input strings for use in Visual Basic Script
XmlEncode Encodes input strings for use in XML
XmlAttributeEncode Encodes input strings for use in XML attributes

具体的使用方法及示例,请参考MSDN: Microsoft Anti-Cross Site Scripting Library V1.5: Protecting the Contoso Bookmark Page 

AntiXSS Library v3.0 除了保留了老版本的一些静态的Encode工具方法(重新实现),另外最重要的就是新增了
AntiXSS HttpModule 用于统一 Encode 输出ASP.Net Server Web Control 为encode 输出的相关属性,如:Text属性等
原理大概是《利用 HttpModule,基于输出,统一控制、干预、处理(例如: 过滤关键字、AntiXSS) ASP.Net WebForm Control 展现属性的方案原型》
http://www.cnblogs.com/Microshaoft/archive/2009/01/08/1371475.html

微软反跨站脚本库主页:http://msdn.microsoft.com/en-us/security/aa973814.aspx
XSS(跨站)攻击全解析: http://www4.it168.com/jtzt/shenlan/safe/xss/
CodePlex站点: http://antixss.codeplex.com/

posted @ 2009-07-16 07:36  张善友  阅读(5576)  评论(13编辑  收藏  举报