xss攻击(跨站脚本)

原理
跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。

我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是把输入的数据变成可执行的程序语句。SQL注入是如此,XSS也如此,只不过XSS一般注入的是恶意的脚本代码,这些脚本代码可以用来获取合法用户的数据,如Cookie信息。

其原理如下图所示:

XSS从攻击原理上,分为三类:

1:反射型XSS

将用户输入“反射”回浏览器,即将用户的输入变成HTML传输回客户端。如:
          Response.Write(“<script>alert(/xss/);</script>”)
    就是一个典型的反射型XSS。

2:存储性XSS

存储性XSS本质上也是一种反射型XSS,但是它把攻击脚本放置在服务器端,一旦被注入,可被多人多次利用。如,发表博文,就可以引入存储性的XSS。

3:DOM BASED XSS

如果用户的输入被用于修改原有HTML的DOM内容,就会引入这一类攻击。

最典型的是输入的内容用于作为某个节点的innerHTML,如果不对输入作验证,则会被注入攻击代码。

如下的一段脚本注入后,就会获取用户的Cookie
    <script language=”javascript”>
          var cockieInfo =window.cockie;
          //send cockieInfo to luminji
    </javascript>


实际案例

使用Fiddler,查看到某系统添加公共信息有一处Post,我们伪造如下的请求:

POST xxx.com/AddPublicInfo HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
Host: 192.168.80.136
Content-Length: 187
Cookie: ASP.NET_SessionId=qk1qvprjrikp2peveg2ini45; LanguageKey=zh_cn; LoginId=dean;

{"type":"ExtBulletin","title":"1111asdf11","content":"22sdfs22<script>alert(/xss/);</script>","validPeriod":"1","beginDate":"","endDate":"","language":"None","linkFile":"0","fileName":""}

然后,刷新公共信息页面,发现注入代码成功。如果该站点同时存在会话劫持方法的漏洞,则将注入脚本改称获取cookie,攻击者就可以伪造任意访问了本信息的用户来登录系统。

通过该例子我们也可以看到,对于XSS的防范,所有的处理应该是在服务器端的,因为客户端的验证,如使用JS来验证输入是完全可以通过伪造请求被绕过的。所以在安全架构方面对于JS脚本的定位为:JS仅用于改善用户体验。

应对策略

1. 在服务器段限制输入格式,输入类型,输入长度以及输入字符

要注意避免使用一些有潜在危险的html标签,这些标签很容易嵌入一些恶意网页代码。如<img> <iframe><script><frameset><embed><object>< style>等。

注意,不要仅仅在客户端使用js代码加以验证。因为客户端的js脚本可以被绕过。

2. 格式化输出。将输入的内容通过HttpUtility.HtmlEncode处理,这样就不能直接看出输出的内容。

3:对于asp.net站点,可以确保:

<configuration>     
      <system.web>     
          <pages   validateRequest="true"   />     
      </system.web>     
  </configuration>

注意,默认情况下为true。

4:IE本身也有机制阻止跨站脚本

存在跨站脚本威胁,如果使用的IE8,则这个请求会被拦截,提示“Internet Explorer 已对此页面进行了修改,以帮助阻止跨站脚本。单击此处,获取详细信息...”。

这个错误是由于 IE8 的跨站脚本(Cross-site scripting, XSS)防护阻止了跨站发送的请求。

以下是如何配置它:点击 IE8 的“工具”-“Internet 选项”,进入“安全”选项卡,打开“Internet”下方的“自定义级别”,在“安全设置”对话框中找到“启用 XSS 筛选器”,改为“禁用”即可。 注意,“启用”是默认配置。

当然,浏览器本身的这种机制是不可靠的。


具体措施

n  查找所有code behind中的”.Text”

通过文件查找出所有的为文本赋值的代码行;

n  为赋值Encode

对上一步骤查找出来的赋值,首先Encode。

n  查找所有的WCF方法中返回字符串的

通过文件查找”.svc”,找到全部的WCF方法,筛选出返回string的方法

n  处理字符串再返回

对上一步骤查找出来的返回的string,先找到序列化方法,然后对实体的可能被用于输出为html的属性,首先Encode

以上统计纳入到如下表格:


序号


文件


代码行


处理完成否

n  查找所有的文本输入控件

通过文件查找前台所有的””text””,”’text’”,”type=text”,”textarea”,”textbox”字样,筛选出含文本输入的控件,这些控件包括:

<input type="text" />

<textarea></textarea>

<asp:TextBox runat="server"></asp:TextBox>

n  查找所有带参数的URL

通过文件查找所有的”aspx?”,”html?”,”htm?”,”.svc”(随系统的文件后缀方案而定),筛选出所有带参数的URL。

n  查找所有的ajax

通过文件查找前台中所有的”ajax”,筛选出所有的ajax输入。

n  查找所有cookie

通过文件查找所有的”cookie”,找出所有设置cookie的地方。

n  查找所有session

通过文件查找所有的” session”,找出所有设置session的地方。

n  处理以上查找的结果

分别将其对应的输出查找出来,然后汇集为如下的表格:


序号


前台文件


输入出代码行


输出文件


为输出赋值的代码行


处理完成否

n  查找遗漏

为了防止遗漏,需要直接查找输出,通过文件查找所有的”Response.Write”(后台),” innerHTML”(前台),”document.write”(前台)。将遗漏更新到上面的表格中。

注意,实际上,如果将应用程序变量和数据库内容赋值给前台控件,通过这种方式还是不能找到遗漏的,只能依赖于前面的输入的查找来一定程度上避免这种情况。

n  根据以下表格中的处理方法来处理上面统计出来的表格中的代码行,为输出Encode

为了防范XSS攻击,我们可以使用Anti-Cross Site Scripting Library(查看http://msdn.microsoft.com/en-us/library/aa973813.aspx,不过当前版本已经到了4.2.1,下载地址为:http://www.microsoft.com/en-us/download/details.aspx?id=28589)

该Library提供如下的几个函数,分别对不同的应用场景作出处理:


Encoding Method


Should Be Used If …


Example/Pattern


HtmlEncode


Untrusted input is used in HTML output except when assigning to an HTML attribute.


<a href="http://www.contoso.com">Click Here [Untrusted input]</a>


HtmlAttributeEncode


Untrusted input is used as an HTML attribute


<hr noshade size=[Untrusted input]>


JavaScriptEncode


Untrusted input is used within a JavaScript context


<script type="text/javascript">

[Untrusted input]

</script>


UrlEncode


Untrusted input is used in a URL (such as a value in a querystring)


<a href="http://search.msn.com/results.aspx?q=[Untrusted-input]">Click Here!</a>


VisualBasicScriptEncode


Untrusted input is used within a Visual Basic Script context


<script type="text/vbscript" language="vbscript">

[Untrusted input]

</script>


XmlEncode


Untrusted input is used in XML output, except when assigning to an XML attribute


<xml_tag>[Untrusted input]</xml_tag>


XmlAttributeEncode


Untrusted input is used as an XML attribute


<xml_tag attribute=[Untrusted input]>Some Text</xml_tag>

n  确保配置web.config中的validateRequest="true"

n  确保Cookie的httponly

通过文件查找所有的”cookie”,找出所有设置cookie的地方,为用于认证的cookie设置如下的格式:

Set-Cookie: cookieName=cookieValue;httponly

原文地址:https://www.cnblogs.com/itplay/p/10421087.html

时间: 2024-08-05 09:28:43

xss攻击(跨站脚本)的相关文章

Java xss攻击(跨站脚本攻击)

发现问题 最近我们的服务器频繁的遭到黑客攻击,真是让人头疼啊,痛定思痛,仔细想想为什么我们会被攻击呢,肯定是我们的代码有漏洞啊,那么我们如何检测我们站点的漏洞呢,首先比较大众的就是通过360网站安全检测(http://webscan.360.cn/),但是发现这个太简单了,不够专业,那么我们再来一个专业的Acunetix Web Vulnerability Scanner,这个软件是收费的,但是我是一个穷人所以就不买了,请原谅.如果你也很穷请到这里下载试用,链接: http://pan.baid

AntiXSS - 支持Html同时防止XSS攻击

AntiXSS - 支持Html同时防止XSS攻击 跨站脚本攻击(XSS)已经不是什么新鲜的话题了,甚至很多大公司也为此吃尽苦头.最简单直接的防范方法,就是不允许任何html标签输入,对用户输入进行编码(htmlencode). 但是如果想用户输入支持一些格式,怎么办?一种办法就是很多论坛采用的BB Code的方法.使用特定的标签代替一些格式.比如:[B]表示粗体,等等.但是,BB Code这种形式并不被广泛接受,它的表现力实在太差了,而且并不是标准格式. 为了让用户的输入更具表现力,涌现了大量

Magicodes.WeiChat——使用AntiXssAttribute阻止XSS(跨站脚本攻击)攻击

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的. 很多时候,我们并不需要屏蔽所有的HTML标签,或者,我们需要设置某些属性支持的HTML标签字符串.还好,框架中封装了相关的特性,以便你直接拿来使用. 命名空间:Magicode

关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)

我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子,当然这是传说,常见的方式是XSS跨站脚本攻击和csrf跨站请求伪造. 3.可用性,比如我们的网络服务是否可用,常用的攻击方式是dos和ddos,拒绝服务和分布式拒绝服务攻击. 本文主要讲述xss和csrf的攻击,配合实例讲述这2者攻击的危害性以及一些防范的措施,有讲的不对或者不完整的地方欢迎大大们

XSS(跨站脚本攻击)的最全总结

从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ==================================================================================================================================================== * 什么是XSS ** 综述 Cross-Site Scripting(XSS)是一类注入问题

避免XSS(跨站脚本攻击)的简单内容转义(测试为知发布到博客)

为避免XSS(跨站脚本攻击),我们可对页面录入的数据,在持久化数据库前,将这些数据转义. import org.apache.commons.lang.StringEscapeUtils; 来自为知笔记(Wiz)

PHP - 防止 XSS(跨站脚本攻击)

<?PHP /** * @blog http://www.phpddt.com * @param $string * @param $low 安全别级低 */ function clean_xss(&$string, $low = False) { if (! is_array ( $string )) { $string = trim ( $string ); $string = strip_tags ( $string ); $string = htmlspecialchars ( $s

360[警告]跨站脚本攻击漏洞/java web利用Filter防止XSS/Spring MVC防止XSS攻击

就以这张图片作为开篇和问题引入吧 <options>问题解决办法请参考上一篇 如何获取360站长邀请码,360网站安全站长邀请码 首先360能够提供一个这样平台去检测还是不错的.但是当体检出来 看到漏洞报告,以为360会像windows上360安全卫士一样帮我们打好补丁.但是实际发现漏洞是要自己修复,并且php和asp aspx有360提供的补丁或者解决方案(想要看这些方案之前要申请为站长但是需要邀请码 这个可以在页面 页面左下角 360主机卫士感恩卡里面领取). 进入修复方案后发现java几

超强XSS攻击利器

======================================================================= BackTrack 5 R1 XSS研究之XSSer(超强XSS攻击利器)使用说明中文版 XSSer使用说明 ================================================================ 简介: ======================================================