一探xss攻击

作者: snow_in | 来源:发表于2018-08-26 12:40 被阅读8次

    跨站脚本攻击(cross site scripting),为了与css做区分,简称为xss。顾名思义,就是在别人的网站上通过执行脚本来达到攻击网站的目的。
    为什么能执行脚本?就是因为程序过滤不严谨,太过于相信用户的输入和服务器的返回内容,直接在网页呈现,才让人有机可乘。
    如何测试一个网站存不存在xss漏洞呢?可以把URL的请求参数内容换成<script>alert('xss')</script>,看会不会弹出内容,如果可以,那就存在xss漏洞了

    xss的类型

    1. 反射性

    反射性xss又称非持久型xss。通常是诱使用户点击恶意链接,注入脚本被传输到目标服务器上,然后目标服务器又“反射”到用户浏览器上,从而在浏览器上执行脚本。

    比如受害者点击了这个链接

    http://test.com/search/?q=<script>alert(document.cookie)</script>
    

    注入的脚本被当作搜索关键词发送到目标服务器上,在搜索结果页,脚本被当作关键词嵌入页面,从而在页面中执行,这就是反射性xss。由于脚本的执行只在链接被点击的时候才会发生,所以又叫非持久型xss。

    反射性xss攻击的途径
    • 向想攻击的目标用户发送电子邮件,邮件里包含带有漏洞的链接,并含有攻击负载,并配上诱使用户点击的文字。
    • 有些网站允许用户提交html标签,就可以提交一些像img可以带有url的标签,url指向存在漏洞的网站,这样用户也不会察觉到是中了圈套。
    • 在存在漏洞的网站插入广告,广告带有攻击脚本,用户在点击广告的时候,也会攻击成功。
    2. 存储型

    存储型xss又称持久性xss。之所以称为持久型,是因为攻击脚本永远地存在了目标服务器的数据库中。
    这种类型的攻击多在论坛中出现,如果不对用户的输入加以控制,用户输入了类似于<script>alert(document.cookie)</script>这种的脚本,然后在数据库中存储了起来,只要浏览这个帖子脚本就会执行,那么所有浏览这个帖子的用户都会中招,影响的范围会很大,比反射型xss的危害更大。

    3. DOMBasedXSS

    用户通过交互修改dom改变页面结构产生的xss称为DOMBasedXSS。能够修改dom在于把从document.location 或document.URL 或 document.referrer等获取等数据直接展示在了页面上。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>xss</title>
    </head>
    <body>
      <img src="{{img_src}}">
      <script>
        var href = (location.search.match(/href=([\w\W]+)/i) || [])[1];
        console.log('href', href, decodeURIComponent(href));
    
        document.write(decodeURIComponent(href))
      </script>
    </body>
    </html>
    

    这里是获取url的参数然后写在了页面上,如果url是http://test.com/search/?href=<script>alert(document.cookie)</script>,那参数<script>alert(document.cookie)</script>就会直接插入到页面中,这段js代码也会执行,就产生了xss。

    危害

    1. 窃取用户的cookie,盗取私密信息。如果用户是网站管理员,可进行的操作将更多,也会造成更大的危害。
    2. 网络钓鱼,盗取用户账号
    3. 盗取企业重要资料
    4. 流量劫持等

    防范措施

    1. 设置httpOnly,对cookie进行保护
    2. 过滤特殊字符,对script、img、a标签等进行过滤
    3. 在将不可信数据插入html之前,对特殊字符进行编码
    特殊字符 实体编码
    & &amp
    > &gt
    < &lt
    / &#x2F
    " &quot
    ' &#x27

    相关文章

      网友评论

        本文标题:一探xss攻击

        本文链接:https://www.haomeiwen.com/subject/pulgiftx.html