zoukankan      html  css  js  c++  java
  • CSRF

    1 CSRF概念

    攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等

    2 攻击例子

    GET方式

    银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

      危险网站B,它里面有一段HTML的代码如下:

      <img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
      首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......

    一般不采用GET来做写的操作

    POST方式

    <form action="Transfer.php" method="POST">
        <p>ToBankId: <input type="text" name="toBankId" /></p>
        <p>Money: <input type="text" name="money" /></p>
        <p><input type="submit" value="Transfer" /></p>
    </form>

    攻击方式

    <html>
      <head>
        <script type="text/javascript">
          function steal()
          {
                   iframe = document.frames["steal"];
                   iframe.document.Submit("transfer");
          }
        </script>
      </head>

      <body onload="steal()">
        <iframe name="steal" display="none">
          <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
            <input type="hidden" name="toBankId" value="11">
            <input type="hidden" name="money" value="1000">
          </form>
        </iframe>
      </body>
    </html>

    一般把嵌入了恶意代码的连接发给受害者,引诱其点击

    3 防御

    CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的

    上面攻击者模拟了POST表单的提交来实现攻击,如果表单无法模拟,那攻击就无法完成。那就表单的提交需要做验证,比如返回一个随机token值,表单提交的时候会校验这个值来判断表单提交的合法性

    如果这个值黑客无法模拟,那就没办法模拟表单的提交了

     对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了

    token也可以存放到HTML里面,每次发送请求的时候附加到请求头里面

    <meta name="csrf-token" content="{{ csrf_token() }}">

  • 相关阅读:
    购物车程序
    python学习第二节 数据类型、字符编码、文件处理
    while实现2-3+4-5+6...+100 的和
    给文件加权限
    查询数据插入新表格
    归档程序错误。在释放之前仅限于内部连接
    查看Linux环境变量
    查找文件命令
    ORACLE导入导出操作篇
    oracle中使用minus进行数据排除(类似SqlServer except函数)
  • 原文地址:https://www.cnblogs.com/sysnap/p/8309631.html
Copyright © 2011-2022 走看看