cors&jsonp基础

cors&jsonp攻击&防御

同源策略

不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。那么何为同源呢,即两个站点需要满足同协议,同域名,同端口这三个条件。

cors

CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。

跨域访问的场景

  1. 比如后端开发完一部分业务代码后,提供接口给前端用,在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问的问题。
  2. 程序员在本地做开发,本地的文件夹并不是在一个域下面,当一个文件需要发送ajax请求,请求另外一个页面的内容的时候,就会跨域。
  3. 电商网站想通过用户浏览器加载第三方快递网站的物流信息。
  4. 子站域名希望调用主站域名的用户资料接口,并将数据显示出来。

配置允许跨域

两个重要参数:

  1. Access-Control-Allow-Origin指是允许访问的源
  2. Access-Control-Allow-Credentials指的是允许带上cookie访问资源

配置实例

<? php
header("Access-Control-Allow-Origin:http://www.evil.com");
header("Access-Control-Allow-Credentials:true");
phpinfo();
?>

注意如下配置看上去允许所有,但实际上浏览器会拒绝(浏览器的安全机制)

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

参考: https://segmentfault.com/a/1190000012550346

cors问题如何发现

可以借助bp,将请求头中添加头信息查看返回,是否信任该域,如果信任则可以进行跨域
如何判断: 当提交了如下请求侯,查看具体的响应,理论上会有一些信息返回,比如是否信任该域,以及对该域是否可允许带cookie访问的一些限制。

请求内容
Origin:foo.example.org (后面的域名信息自行替换)
响应内容
HTTP/1.0 200 OK
Access-Control-Allow-Origin: foo.example.org
Access-Control-Allow-Credentials: true

测试记录

结合nginx进行测试
nginx 配置

location / {
    #include /usr/share/nginx/html/XSS/.htaccess;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'User-Agent, Referer, Content-Type';
        if ($request_method = 'OPTIONS') {
        return 204;
        }
    }
这里是允许所有来源

测试结果:

在请求头中加入origin: http://www.sina.com.cn  响应了具体的配置信息
如下:
HTTP/1.1 304 Not Modified
Server: nginx/1.10.2
Date: Mon, 18 May 2020 05:04:01 GMT
Last-Modified: Mon, 31 Oct 2016 12:37:02 GMT
Connection: keep-alive
ETag: "58173aee-e74"
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: User-Agent, Referer, Content-Type

jsonp

JSONP是一种简单的服务器与客户端跨域通信的办法,此种跨域只能发起GET请求。其基本思想是网页通过添加一个script元素,向服务器请求JSON数据,这种做法不受同源策略限制。服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。

cors 结合xss

有时候CORS配置了信任自身的任意子域,那么如果一个子域存在XSS漏洞就可以通过这个漏洞去读取其他子域的资源,类似的场景还有比如HTTPS域信任HTTP域等。
批量检测的话可以通过inurl: ?callback= 关键字来进行搜索

cors 扫描工具

github上提供了一个关于扫描CORS配置漏洞的脚本,https://github.com/chenjj/CORScanner

一些高级利用方式

参考: https://www.freebuf.com/articles/terminal/175609.html

参考

  • 包含靶机:https://www.freebuf.com/column/207802.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值