表里如一 2012-06-21
XSS跨站攻击
目录
1XSS跨站攻击简介1
1.1什么是XSS1
1.2XSS的分类1
1.3XSS的危害1
2XSS的攻击原理1
2.1本地式漏洞攻击1
2.2存储式漏洞攻击2
2.3反射式漏洞攻击2
3XSS的防御策略3
3.1过滤特殊字符或敏感字段3
3.2对敏感数据进行加密4
1XSS跨站攻击简介
1.1什么是XSS
XSS又叫CSS(CrossSiteScript),跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。
1.2XSS的分类
一类是来自内部的攻击,主要指的是利用网页自身的漏洞,将恶意脚本注入到网页,当用户访问此页面时,恶意脚本也会跟着执行,这样恶意脚本就能利用到用户的所有状态数据执行恶意操作,比如发微博、私信等(新浪微博的XSS攻击就是此类)。
另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,攻击网站漏洞。
1.3XSS的危害
•盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
•控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
•盗取企业重要的具有商业价值的资料
•非法转账电子邮件
•强制发送网站挂马
•控制受害者机器向其它网站发起攻击
2XSS的攻击原理
XSS攻击原理是利用web应用的漏洞进行攻击的。这些漏洞攻击可归类为三种:本地式漏洞攻击,存储式漏洞攻击,反射式漏洞攻击。
2.1本地式漏洞攻击
这种漏洞存在于页面中客户端脚本自身。
攻击工程:
A(攻击者)给B(被攻击者)发送一个恶意构造了Web的URL。
B点击并查看了这个URL。
恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在B电脑上。
具有漏洞的HTML页面包含了在B电脑本地域执行的JavaScript。
A的恶意脚本可以在B的电脑上执行B所持有的权限下的命令。
2.2存储式漏洞攻击
该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。
攻击过程:
C拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
A注意到C的站点具有存储式漏洞。
A发布一个热点信息,吸引其它用户纷纷阅读,该热点信息中潜藏着一段XSS攻击代码。
C或者是任何的其他人B浏览该信息,其会话cookies或者其它信息将被A盗走或攻击。
2.3反射式漏洞攻击
类似存储式漏洞,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能注入到动态页面中。
攻击过程:
B经常浏览某个网站C。B使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)在网站A中。
A发现C站点包含反射性的XSS漏洞,编写一利用漏洞的URL,并将其冒充为来自C的邮件给B。
B在登录到C的站点后,浏览A供的URL。
嵌入到URL中的恶意脚本在B的浏览器中执行,然后在B完全不知情的情况下将这些信息发送到A的Web站点。
3XSS的防御策略
3.1过滤特殊字符或敏感字段
XSS攻击也是利用了Web页面的编写疏忽,所以有一种方法就是从Web应用开发的角度来避免。
(1)对输入数据进行验证与过滤:
用户在界面输入数据时,可以通过js对提交数据进行验证和过滤,但这层验证防御很弱,很容易让攻击者攻破。除了在界面前端验证过滤外,我们还可以通过后台对页面提交过滤的数据进行验证和过滤。严格的验证可以让web应用将可攻击漏洞降到最小,同时也可以保证信息的安全性和系统正确性。
如:可以对用户输入<script>,<img>,<iframe>,http,src等敏感信息进行过滤。可以对数据格式进行验证,比如邮箱输入,必须满足一定的邮箱格式。
(2)对输出数据进行过滤:
Web应用在将数据展现给用户的时候,特别是那些由用户输入的数据在输出时必须进行过滤后在展现给用户界面。
如:在jsp页面动态展现后台数据输出信息是,可以使用:
<c:outvalue=”${xxx}”/>
输出数据信息,这样out标签会对数据进行相应的过滤处理,即使数据中包含有攻击性脚本代码,也会过滤为文本的形式展现出来。
3.2对敏感数据进行加密
这里所说的敏感数据,就是关系到系统安全的数据,系统中重中之重的数据。
Web应用中往往最敏感的数据信息就是用户信息(用户名,密码),对这些敏感信息的使用和存储都要谨慎小心,因为web应用系统的根本就是用户,一旦用户信息被攻击,可以想象整个web系统会遭受怎样的攻击和破坏。
(1)web系统中对敏感数据加密存储:
在web系统中对敏感数据的常用存储就三种:一种是后台存储,如数据库存储。一种是前端存储,如cookie存储。一种内存存储,如session。不管是那种存储都必须对安全数据进行加密存储。
如数据库存储用户密码必须使用加密存储,最好是使用不可破解不可逆的算法加密,如md5(当然MD5也可以通过穷举法来破解,我们可以在md5基础上加上特别的算法来加密);
如cookie存储,如果用cookie来存储敏感信息,最好是不要存储实质性的敏感信息,而存储一个加密的token信息,根据前端页面传过来的token信息在后台代码中匹配验证或获取相对应的信息。
如session存储,对于这种内存中存储的信息,要遵循,作用域最小化,能清则清。用户信息如果能在request中使用的,就最好不要再session中使用。一是信息常驻内存,二存储作用域扩大不够安全。session中存储用户信息最好不要连带用户特敏感信息,如用户密码,能清则清。
(2)web系统中要安全使用敏感数据:
web系统中要安全使用敏感数据,对这些数据的使用访问要有相应的权限控制和验证,同时通信的过程中也要注意通信安全,如加密,采用SSL通道等
***************************
未完待续