CORS (跨域资源共享)的漏洞

跨域资源共享(CORS)漏洞详解

浏览器同源策略

  • 同协议,同端口同域名
  • 不运行别的网站访问该网站资源

两种跨域方法

  1. JSONP跨域请求

    • 原理 https://www.cnblogs.com/znyu/p/6839617.html
    • jsonp利用script标签具有跨域能力的特点,允许用户通过script的src属性向服务器发送请求,并传递一个函数名作为参数,服务端返回数据时会将这个callback函数作为函数名包裹住从服务端接收的json数据,客户端会按照定义好的方式处理数据。举例如下
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>JSONP 实例</title>
    </head>
    <body>
    <div id="list"></div>
    <script type="text/javascript">
    function callbackFunction(result, methodName) {
      var html = '<ul>';
      for(var i = 0; i < result.length; i++) {
        html += '<li>' + result[i] + '</li>';
      }
      html += '</ul>';
      document.getElementById('list').innerHTML = html;
    }
    </script>
    <script type="text/javascript" src="http://www.myweb.com/demo/jsonp.php?jsoncallback=callbackFunction"></script>
    </body>
    </html>
    
    • callbackFunction函数名作为参数传递给服务器,服务器返回数据形式为:callbackFunction(["list1","list2"]),显示结果会按照 callbackFunction()函数来处理。
  2. CORS跨域请求

  • jsonp只能发送get请求的包

CORS的安全问题

  • 返回报文头部的Access-Control-Allow-Origin根据请求报文Origin生成

  • 如果Access-Control-Allow-Origin可控,且Access-Control-Allow-Credentials为true, 那么就可以利用一个可控的网站来窃取一个人的个人隐私信息

  • 就可以请求一些敏感信息,请求用户主页等

CORS漏洞与CSRF漏洞

  • 相同点:
    • 都要借助第三方网站
    • 都有借助ajax的异步过程
    • 一般都要用户登录
  • 不同点
    • CORS可以读取到受害者的敏感信息
    • CSRF可以完成一些如转账类的敏感caoz
    • 一般有CORS都会有CSRF

简单的漏洞检测方法

  • 修改一下Origin的头
  • 过滤删选

常见的漏洞点

  1. 互联网厂商的api接口
  2. 聊天程序的的api接口
  3. app的api(不过有一 些请求需要带有一 些额外的请求头,利用起来比较困难)
  4. 区块链厂商

● CORS的规范中还提到了"NULL"源。触发这个源是为了网页跳转或者是来自本地HTML文件。目标应用可能会接收"null"源, 并且这个可能被测试者(或者攻击者)利用,任何网站很容易使用沙盒iframe来获取" null“源

防御

  1. 不要配置"Access-Control-Allow-Origin" 为通配符“*”,而且更重要的是,要严格效验来自请求数据包中的"Origin" 的值。当收到跨域请求的时候,要检查"Origin" 的值是否是一个可信的源, 还要检查是否为null

  2. 避免使用"Access-Control-Allow-Credentials: true"

  3. 减少Access-Control- Allow-Methods所允许的方法

posted @ 2020-05-03 19:40  10nnn4R  阅读(2456)  评论(0编辑  收藏  举报