From 611f233e9ffb15e3e1229a06686d77a8126a6b71 Mon Sep 17 00:00:00 2001 From: astaxie Date: Tue, 16 Oct 2012 18:08:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E5=B0=8F=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 9.3.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/9.3.md b/9.3.md index e7f05f88..99704aab 100644 --- a/9.3.md +++ b/9.3.md @@ -1,4 +1,45 @@ ##9.3 避免XSS攻击 +随着互联网技术的发展,现在的Web应用都含有大量的动态内容以提高用户体验。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成 XSS)的威胁,而静态站点则完全不受其影响。 + +##什么是XSS +XSS攻击:跨站脚本攻击(Cross-Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与Web应用。XSS的攻击目标是为了盗取客户端的cookie或者其他网站用于识别客户端身份的敏感信息。获取到合法用户的信息后,攻击者甚至可以假冒最终用户与网站进行交互。 + +XSS目前主要的手段和目的如下: + +- 盗用cookie,获取敏感信息。 +- 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。 +- 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击者)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作,前段时间新浪微博就遭遇过一次XSS。 +- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。 +- 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果 + +##XSS的原理 +XSS漏洞产生的原因是由于Web应用对用户提交请求的数据未做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“>”、“<”),然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行。 + +许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的cookie信息。有关攻击方法的详细情况请看如下例子: + +我们现在有一个网站,根据参数输出用户的名称,例如访问url:"http://127.0.0.1/?name=astaxie",就会在浏览器输出如下信息: + + hello astaxie + +那么如果我们传递这样的url:"http://127.0.0.1/?name=",这个时候你就会发现你的浏览器跳出一个弹出框,这说明站点已经存在了XSS漏洞,那么用户如何来获取Cookie呢?也是类似上面的代码,输入如下的url:"http://127.0.0.1/?name=",这样就可以把当前的cookie发送到指定www.xxx.com站点。这样攻击者就可以把类似这样的url进行短域名服务缩短url,然后把这些url通过途径传播开来,被攻击用户一旦点击了这样的url,相应数据就会被发送到收集cookie的脚本中。这样就获得了cookie信息,然后利用Websleuth之类的工具来检查是否能盗取那个账户。 + +上面的这种漏洞叫做反射式漏洞,其实XSS漏洞还有另外两种:本地利用漏洞和存储式漏洞 + +- 本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。 +- 存储式漏洞,这是目前应用最为广泛而且有可能影响到Web服务器自身安全的漏洞。 + +##如何预防XSS +其实这个问题很简单,坚决不要相信任何用户输入并过滤所有特殊字符。这样就能消灭绝大部分的XSS攻击。 + +目前防御XSS主要有如下几种方式: + +- 过滤特殊字符 + + 避免XSS的方法之一主要是将用户所提供的内容进行过滤,Go语言提供了HTML的过滤函数: + +- 使用HTTP头指定类型 + +##总结 ## links * [目录]()