我最近不得不将 Access-Control-Allow-Origin
设置为 *
以便能够进行跨子域 AJAX 调用。我觉得这可能是一个安全问题。如果保留该设置,我会面临哪些风险?
最佳答案
通过响应 Access-Control-Allow-Origin: *
,所请求的资源允许与每个源共享。这基本上意味着任何网站都可以向您的网站发送 XHR 请求并访问服务器的响应,如果您没有实现此 CORS 响应,情况就不会如此。
因此,任何网站都可以代表其访问者向您的网站发出请求并处理其响应。如果您实现了一些基于浏览器自动提供的内容(cookie、基于 cookie 的 session 等)的身份验证或授权方案等内容,则第三方网站触发的请求也将使用它们。
这确实会带来安全风险,特别是如果您不仅允许所选资源共享资源,还允许每个资源共享资源。在这种情况下,您应该看看 When is it safe to enable CORS? 。
更新(2020-10-07)
当前Fetch Standard当凭据模式设置为 include
且 Access-Control-Allow-Origin
设置为 *
时,将忽略凭据。
因此,如果您使用基于 Cookie 的身份验证,您的凭据将不会根据请求发送。
关于ajax - 设置 Access-Control-Allow-Origin 接受所有域时存在哪些安全风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12001269/