Scripting(XSS)是无比盛行的Web安全漏洞之一

  就像要说北魏楚AntiXss.HtmlEncodeHttpUtility.HtmlEncodeServer.HtmlEncode中间实际的分歧有点不方便,不过它们基本都得以用来预防站点受到恶意脚本注入的口诛笔伐。依照MSDN.aspx)的解释,HtmlEncode只可以用来将'<‘,’>’,’&’以及'”‘实行转义,其余也席卷编码大于0x80的ASCII码,但是那要视服务器的环境而定,不相同版本的IIS转义的景况不一。例如将站点宣布到IIS6和公告到IIS7上会有分别,其它假诺你只是在VS上调节Web应用程序,HtmlEncode的转义意况也区别。

跨站脚本Cross-Site Scripting(XSS)又叫CSS (克罗丝 Site Script)
,跨站脚本攻击。它指的是黑心攻击者往Web页面里陈设恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被实施,从而达到恶意用户的越发指标。XSS属于被动式的攻击,因为其被动且倒霉利用,所以众多个人常呼略其风险性。
跨站脚本克罗丝-Site
Scripting(XSS)是极其流行的Web安全漏洞之一。据计算,二零零五年,跨站脚本类的安全漏洞的数量已经远远胜出古板项目标安全漏洞(http://en.wikipedia.org/wiki/Cross-site_scripting)

  至于什么是跨站点脚本攻击以及为什么要防范跨站点脚本攻击?我们能够参考《天涯论坛》的那篇文章http://www.cnblogs.com/alilang/archive/2013/01/28/2879589.html

就算如此在IE第88中学引入了客户端的XSS过滤器以压缩XSS对用户造成的迫害,但是XSS本质上是Web应用服务的纰漏,仅仅依赖客户端的保养措施是不够的。化解难题的常有是在Web应用程序的代码中排除XSS安全漏洞。

  有关AntiXss.dll的牵线,能够参见MSDN的那篇文章http://msdn.microsoft.com/en-us/library/aa973813.aspx

以下是在Web应用的支付中幸免XSS安全漏洞的多少个条件:

  考虑下边那么些情景:

  • 自笔者批评有着产生动态网页的代码
  • 判定动态网页的始末是还是不是包蕴不安全的输入音讯
  • 对输入进行校验
  • 对输出实行编码以过滤特殊字符
<br />
<img id='img<%=Server.HtmlEncode(Request.QueryString["userId"])%>' src='/image.gif' /><br />
<br />
An attacker could inject client-side script here by setting userId to:' onload=alert('xss') alt='<br />

运用不一致的Web开发工具,实施上述条件的具体步骤也不相同等。当供给将二个字符串输出到Web网页时,但又不能够一心鲜明那个字符串是还是不是包涵HTML的特殊字符,例如“<,>,&”等等,能够应用编码(HTMLEncode)以过滤这一个特殊字符。在ASP.NET中有二种艺术:一种是运用HttpUtility,另一种正是行使微软提供的XSS库,最新版本是3.0
,选拔MS-PL协议公布的开源项目,五月1六日发表了,下载地址是:http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09&displaylang=en

  有个别特定的条件下方面的HTML代码会存在注入脚本攻击的风险。例如用户在伸手页面包车型客车UPRADOL后边传递那样的参数:?userId=’ onload=alert(xss)
alt’

AntiXss的应用方法与HttpUtility类似:

  则页面会成功实践所注入的剧本!原因大概在于Server.HtmlEncode并不能立竿见影过滤掉用户输入中的恶意字符,同样的景观也或者会油可是生在HttpUtility.HtmlEncode中。当出现这种情况的时候,考虑将其替换来AntiXss.HtmlEncode方法。

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

 

它们最大的界别在于HttpUtility.HtmlEncode选择的是黑名单验证(Blacklist)方式。即HttpUtility.HtmlEncode仅仅过滤它掌握的特殊字符,而允许任何的输入。AntiXss.HtmlEncode选拔的白名单验证(White
list)格局。它只允许输出它认为合法的字符,而过滤掉此外的具有字符。

两者中,AntiXss.HtmlEncode要更为安全,是引进的使用手腕。

在asp.net 程序中幸免 克罗丝-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/

相关文章