TLDR
对于公共API,使用Access-Control-Allow-Origin:*(“ ACAO”)标头是否不安全?
是否将使用preflight的“ Origin”标头构造自定义ACAO标头会更安全?
详细信息
我正在开发一个API,该API将驻留在可在线使用的服务器上,但只会响应位于客户LAN内的我的客户端应用程序。
我正在使用的这个特定API端点是客户端应用程序与服务器联系并提供UUID以进行注册的初始调用。我不会事先知道此请求的来源(域),因此我想,为了防止所有服务器对我的服务器进行恶意攻击,我应该发送一个唯一的标头(X-123-ZYX)与请求。当我通过AJAX进行操作时,飞行前请求将包含OPTIONS动词,该动词将在服务器上进行检查并以Access-Control-Allow-Header响应:X-123-ZYX。
在处理各种SO帖子和Google搜索CORS标头的最后48小时中,似乎普遍同意,为了使我的服务器的API从getgo中正常工作,我应该添加 Access-Control-服务器上的Allow-Origin:* 标头也允许来自任何调用方的请求。但是,另一篇文章指出,为了提高安全性,应在服务器飞行前响应中更改标题 Access-Control-Allow-Origin:* ,以反映呼叫方的值原始标头。
我在服务器上使用PHP,因此我可以轻松构造此自定义ACAO标头,但我确实怀疑这如何提高安全性?也许MITM攻击会受到挫败,但是我很好奇,看看关于这种方法的共识是什么?