【漏洞归纳】CORS跨域资源读取漏洞
2023-11-22 15:6:36 Author: 利刃信安攻防实验室(查看原文) 阅读量:8 收藏

通用修复建议:

1.具体指定允许的来源: 在CORS配置中,应明确指定允许访问资源的来源,而不是使用通配符*。

2.携带身份验证信息时要求具体来源: 如果资源需要身份验证信息,不应该允许所有来源访问,而是明确指定允许的来源,并且在Access-Control-Allow-Credentials头部设置为true。

3.限制允许的方法和标头: 通过Access-Control-Allow-Methods和Access-Control-Allow-Headers头部,限制允许的HTTP方法和HTTP标头,以减少攻击面。

Nginx设置CORS实现跨域访问

默认情况下Ajax在请求跨域的时候会被阻止,如调用API/前端库字体等不方便,可通过如下设置来实现跨域访问。

Nginx配置

nginx server段内添加如下代码,并重启Nginx即可:

location /{

    add_header 'Access-Control-Allow-Origin' ip地址;

    add_header 'Access-Control-Allow-Credentials' 'true';

    add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With';

    add_header 'Access-Control-Allow-Methods' 'GET,POST';

}

注意:add_header 'Access-Control-Allow-Origin' ip地址 需要进行定ip配置。

参考代码:

// 跨域请求前设置正确的CORS头

response.setHeader("Access-Control-Allow-Origin", "http://example.com");

response.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");

response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");

// 服务端校验referer头并设置允许的origin

if (request.getHeader("referer") != null &&

    request.getHeader("referer").contains("http://example.com")) {

  response.setHeader("Access-Control-Allow-Origin", "http://example.com");  

} else {

  response.sendError(403);  // Forbidden  

}

// 前端通过AJAX发起跨域请求

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://example.org/cors-endpoint');

xhr.setRequestHeader('Origin', 'http://example.com');

xhr.send();

// 服务端检验origin头并做出响应

if (request.getHeader("Origin") != null &&

    request.getHeader("Origin").equals("http://example.com")) {

  response.setHeader("Access-Control-Allow-Origin", "http://example.com");  

} else {

  response.sendError(403);  

}

// 使用CORS middleware对所有请求设置默认CORS头

app.use((req, res, next) => {

  res.setHeader('Access-Control-Allow-Origin', 'http://example.com');

  res.setHeader(

    'Access-Control-Allow-Methods',

    'GET, POST, OPTIONS, PUT, PATCH, DELETE'

  );

  res.setHeader(

    'Access-Control-Allow-Headers',

    'X-Requested-With,content-type'

  );

  next();

});

Java中,可以通过使用Spring Framework来配置CORS的策略。以下是一个简单的修复示例:

import org.springframework.web.bind.annotation.CrossOrigin;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping("/api")

public class MyController {

    @CrossOrigin(origins = "https://trusteddomain.com", allowCredentials = "true")

    @GetMapping("/secured-resource")

    public String getSecuredResource() {

        // Logic to handle the secured resource

        return "This is a secured resource";

    }

}

在上述示例中,@CrossOrigin注解用于配置CORS策略。origins参数指定了允许的来源,allowCredentials参数设置为true表示允许携带身份验证信息。请根据实际需求进行调整,确保CORS策略严格限制访问资源的来源。


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1Mjk3MDY1OA==&mid=2247508076&idx=4&sn=9c3c09a47014004e0ba48243f25b6182&chksm=fbfb10a1cc8c99b70184ae40cf16e9fd74b77dec698bfe87b47ed03aed5db6ba71601d675fc9&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh