Cross-Origin-Resource-Policy (CORP) 是一个 HTTP 响应头,它用于控制浏览器是否可以从不同的源加载资源(如图片、脚本、样式表等)。这个头部可以用来防止某些类型的跨站请求,从而增强网站的安全性。CORP 主要是为了防止一种称为“混淆攻击”(confusion attack)的情况,即攻击者通过嵌入式资源(例如 <img> 标签中的图片)来读取另一个站点上的敏感信息。

CORP 与 Cross-Origin-Embedder-Policy (COEP) 和 Cross-Origin-Opener-Policy (COOP) 一起构成了现代浏览器中的一套跨源隔离机制。它们共同工作以提供更强的安全保障,限制不同来源之间的交互,特别是对于那些可能携带敏感信息或执行关键操作的资源。

以下是 Cross-Origin-Resource-Policy 的三个可能值及其含义:

  1. same-origin: 这是最严格的设置,它只允许同源请求加载资源。任何跨源请求都将被阻止。
  2. same-site: 允许同站(即同一顶级域名下的不同子域)和同源请求加载资源。这比 same-origin 稍微宽松一些,但仍能有效地防止来自完全不同站点的请求。
  3. cross-origin: 允许所有来源加载资源。这是最宽松的设置,默认情况下浏览器的行为类似于没有设置 CORP 头部。

要在 Nginx 中添加 Cross-Origin-Resource-Policy 响应头,你可以编辑 Nginx 配置文件,并使用 add_header 指令来定义你希望应用的策略。以下是如何在 Nginx 中配置这个头部的例子:

server {
    listen 80;
    server_name example.com;

    location / {
        # 其他配置...

        # 添加 Cross-Origin-Resource-Policy 响应头部
        add_header Cross-Origin-Resource-Policy "same-origin";

        # 如果你只想为特定资源或路径设置此策略,可以将其放在更具体的位置块中:
        # location /specific-path/ {
        #     add_header Cross-Origin-Resource-Policy "same-origin";
        # }

        # 其他配置...
    }
}

在这个例子中,我们选择了 same-origin 作为值,这意味着只有同源请求才被允许加载指定的资源。你可以根据实际需求调整这个值。

请注意,CORP 与 CORS(跨源资源共享)是两个不同的概念。CORS 控制的是服务器如何响应跨源请求,而 CORP 则是告诉浏览器哪些资源应该被加载。两者可以同时存在并且互不冲突,但它们解决的问题有所不同。

最后,请记得测试 Nginx 配置的有效性,并重新加载 Nginx 使更改生效:

sudo nginx -t
sudo systemctl reload nginx

确保正确配置 Cross-Origin-Resource-Policy 可以帮助你更好地保护网站免受跨站请求伪造和其他类型的攻击。如果你的应用程序需要严格控制资源的加载来源,那么合理地设置 CORP 是一个重要的安全措施。