设置 Access-Control-Allow-Origin 接受所有域存在哪些安全风险?

问题描述

Access-Control-Allow-Origin: *添加到任何资源是完全安全的, 除非 该资源包含受标准凭据以外的东西保护的私有数据。标准凭据是 cookie、HTTP 基本身份验证和 TLS 客户端证书。

例如:受 cookie 保护的数据是安全的

想象一下https://example.com/users-private-data,这可能会根据用户登录状态暴露私人数据。此状态使用会话 cookie。添加到此资源是 安全Access-Control-Allow-Origin: *的,因为此标头仅在没有 cookie 的情况下允许访问响应,并且需要 cookie 才能获取私有数据。结果,没有私人数据被泄露。

例如:受位置 / ip / 内部网络保护的数据不安全(不幸的是,在 Intranet 和家用电器中很常见):

想象一下https://intranet.example.com/company-private-data,它会暴露公司的私人数据,但只有在公司的 wifi 网络上才能访问。添加到此资源是不安全的,因为它使用标准凭据以外的其他东西进行保护 Access-Control-Allow- Origin: *否则,错误的脚本可能会将您用作通往 Intranet 的隧道。

经验法则

想象一下,如果用户在隐身窗口中访问资源,他们会看到什么。如果您对每个人都看到此内容包括浏览器收到的源代码)感到满意,则可以安全地添加Access- Control-Allow-Origin: *.

解决方法

我最近不得不设置Access-Control-Allow-Origin*能够进行跨子域 AJAX
调用。我觉得这可能是一个安全问题。如果我保留该设置,我将面临哪些风险?