摘至:http://www.cnblogs.com/shanyou/archive/2009/07/16/1524515.html
跨站脚本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/
作者:
自由、创新、研究、探索……
出处:
http://shanyou.cnblogs.com/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站:
http://www.openbeta.cn/