XSS

作者: theLexical | 来源:发表于2019-06-11 21:47 被阅读0次

    XSS攻击

    • 反射型XSS
      只是简单的把用户的输入反射给浏览器。一般要构造一个恶意的URL,然后诱使用户去点击,这样才能攻击成功。它是一次性的。
    • 存储型XSS
      这种类型的XSS,会把用户的输入存储到服务器端,具有很强的稳定性和持久性。比如在留言板,发布博客的地方,一旦用户去访问这个页面,就会遭到XSS攻击。
    • DOM-based XSS
      这种攻击并不是按照“是否保存在服务器端”来划分的。它从效果上来说,还是反射型XSS,只是因为发现它的安全专家把它单独划分了出来,就把它作为一个单独的分类了。
      它是修改了页面的DOM节点。
      来看一个例子:
    <script>
    function test(){
      var str = document.getElementById('text').value;
      document.getElementById('t').innerHTML = "<a href=' "+str+" '>testLink</a>";
    }
    </script>
    
    <div id='t'></div>
    <input type='text' d='text' value='' />
    <input type='button' id='s' value='btn' onclick='test()' />
    

    如果构造这样的输入:

    ' onclick=alert(/xss/) //
    
    <a href='' onclick=alert(/xss/) //'>testLink</a>
    

    就产生XSS攻击啦!

    XSS防御

    XSS的防御是很复杂的,浏览器有一些内置的防御措施,这里吧重点放在网站安全上。

    • HttpOnly
      XSS最常被用来窃取用户的Cookie,使用Httponly可以防止JS获得Cookie。比如:
    <?php
    header("set-Cookie: cookie1=test1");
    header("set-Cookie: cookie2=test2;httponly, false");
    >
    
    <script>alert(document.cookie);</script>
    

    但是这个也有绕过的办法。
    比如Apache支持的一个Header是TRACE,它一般用于调试,会将请求头作为响应body返回。cookie在请求头中,利用这个特性,就可以获得cookie了。

    • 输入检查
      必须放在服务器端,因为在客户端很容易就能绕过。
      白名单,黑名单,长度限制,过滤。
      但是它对语境的理解并不完整。
    • 输出检查
      使用安全的编码函数。比如:
    • HTML的HtmlEncode
    • PHPhtmlentitieshtmlspecialchars(),这两个函数完全可以满足需求。
    • OWASP里有一个安全的JavascriptEncode

    相关文章

      网友评论

          本文标题:XSS

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