美文网首页
web安全之XSS与CSRF

web安全之XSS与CSRF

作者: hzl的学习小记 | 来源:发表于2019-07-19 09:52 被阅读0次
    1. XSS - Cross-site scripting
      xss其实就是html的注入问题,攻击者的输入没有经过严格的控制进入数据库,最终显示给来访的用户,导致可以在来访用户 的浏览器里以浏览器用户的身份执行html代码,数据的流程如下: 攻击者的html输入->web程序->进入数据库->web程序->用户浏览器。

    比如我只想在页面上显示一个名字:

    <span class="name">{{name}}</span>
    

    但是,如果我的名字是长这样的:

    XXX<script>alert('SB')</script>
    

    这时候就好玩了:

    <span class="name">XXX<script>alert('SB')</script></span>
    

    攻击手段和目的

    1. 攻击者使被攻击者在浏览器中执行脚本后,如果需要手机来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击攻击者通过javascript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。

    2. 盗用cookie,获取敏感信息

    3. 利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。

    4. 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动

    5. 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果

    XSS 怎么防御

    一个经典的防御方法就是对内容进行转义和过滤,比如

    var escapeHtml = function(str) {
        if(!str) return '';
        str = str.replace(/&/g, '&amp;');
        str = str.replace(/</g, '&lt;');
        str = str.replace(/>/g, '&gt;');
        str = str.replace(/"/g, '&quto;');
        str = str.replace(/'/g, '&#39;');
        // str = str.replace(/ /g, '&#32;');
        return str;
    };
    
    var name = escapeHtml(`<script>alert('SB')</script>`);
    

    此时 name 会变成

    <script>;alert(&#39;SB&#39;)&lt;/script&gt;
    

    CSRF

    CSRF是跨站伪造(Cross-site request forgery)的英文缩写。CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
    要完成一次CSRF攻击,受害者必须依次完成两个步骤。
    1.登录受新人的网站A,并在本地生成Cookie。
    2.在不登出A的情况下,访问危险网站B。

    一个CSRF攻击是如何工作的?

    在他们的钓鱼站点,攻击者可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求:

    <form action="https://my.site.com/me/something-destructive" method="POST">
      <button type="submit">Click here for free money!</button>
    </form>
    

    如何减轻CSRF攻击

    1. 只使用JSON api
      使用JavaScript发起AJAX请求是限制跨域的。
      不能通过一个简单的<form>来发送JSON,
      所以,通过只接收JSON,你可以降低发生上面那种情况的可能性。

    2. CSRF Tokens
      最终的解决办法是使用CSRF tokens。
      CSRF tokens是如何工作的呢?

    服务器发送给客户端一个token。
    客户端提交的表单中带着这个token。
    如果这个token不合法,那么服务器拒绝这个请求。

    参考:

    https://www.jianshu.com/p/64f60ce328b9

    相关文章

      网友评论

          本文标题:web安全之XSS与CSRF

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