本文概述
使用CORS标头限制或允许站点之间的资源共享。
所有现代浏览器均支持CORS(跨源资源共享)标头。
默认情况下, 浏览器通过脚本限制跨域HTTP请求。而且, CORS可以方便地在其他Web应用程序上重用公共应用程序资源。正确添加后, 它会指示浏览器从其他来源加载应用程序。
服务器可以发送六种流行的CORS标头。让我们来探索它们。
访问控制允许来源
它是最流行的一种, 它告诉浏览器在允许的来源上加载资源。它支持通配符(*), 因此任何域都可以加载资源。但是, 它确实具有允许特定来源的选项。
阿帕奇
在httpd.conf或任何其他正在使用的配置文件中添加以下内容。
Header set Access-Control-Allow-Origin "*"
重新启动Apache进行测试。你应该在响应标题中看到它们。
并且, 要允许来自特定来源(例如:https://gf.dev), 可以使用以下内容。
Header set Access-Control-Allow-Origin "https://gf.dev"
Nginx的
这是允许来源https://geekflare.dev的示例。在nginx.conf或使用中的配置文件的服务器块中添加以下内容。
add_header Access-Control-Allow-Origin "https://geekflare.dev";
访问控制允许方法
浏览器可以启动一个或多个HTTP方法来访问资源。例如:– GET, PUT, OPTIONS, PUT, DELETE, POST
阿帕奇
只允许GET和POST。
Header add Access-Control-Allow-Methods "GET, POST"
Nginx的
假设你需要添加DELETE和OPTIONS方法, 然后可以如下添加。
add_header Access-Control-Allow-Methods "DELETE, OPTIONS";
重新启动后, 你应该在响应标题中看到它们。
访问控制允许标题
以下标头位于安全列表中, 意味着你无需添加一个。默认情况下, 它应该工作。
- 内容类型
- 接受
- 内容语言
- 接受语言
但是, 如果你需要添加自定义标签, 则可以这样做。它支持一个或多个标头。
阿帕奇
假设你要允许X-Custom-Header和X-Powered-By标头。
Header always set Access-Control-Allow-Headers "X-Custom-Header, X-Powered-By"
重新启动后, 你应该在响应标题中看到结果。
Nginx的
添加X-Customer-Software和X-My-Custom标头的示例。
add_header Access-Control-Allow-Headers "X-Custom-Software, X-My-Custom";
访问控制公开标头
以下标头已经是安全列表。意味着, 如果要公开它们, 则无需添加。
- 过期
- 语用
- 缓存控制
- 上一次更改
- 内容语言
- 内容类型
但是, 如果你需要除安全列表以外的其他内容, 则可以按照以下说明进行操作。
阿帕奇
使用通配符公开所有标头。
Header always set Access-Control-Expose-Headers "*"
注意:通配符仍不会公开Authorization标头, 如果需要, 则需要明确提及。
Header always set Access-Control-Expose-Headers "Authorization, *"
结果应如下所示。
Nginx的
如果要公开Origin标头。
add_header Access-Control-Expose-Headers "Origin";
访问控制最大时间
你是否知道可以缓存Access-Control-Allow-Header和Access-Control-Allow-Methods头中的数据?在Firefox中最多可以缓存24小时, 在Chrome(76+)中最多可以缓存2小时。
要禁用缓存, 你可以将值保持为-1
阿帕奇
缓存15分钟。
Header always set Access-Control-Max-Age "900"
如你所见, 该值以秒为单位。
Nginx的
要缓存一小时。
add_header Access-Control-Max-Age "3600";
添加后, 重新启动Nginx以查看结果。
访问控制允许凭证
在这里只能设置一个选项-正确。这是为了允许你公开凭据, 例如Cookie, TLS证书, 授权。
阿帕奇
Header always set Access-Control-Allow-Credentials "true"
Nginx的
add_header Access-Control-Allow-Credentials "true";
和结果。
验证结果
添加必要的标头后, 你可以使用浏览器内置的开发人员工具或在线HTTP标头检查器。
总结
我希望以上内容可以帮助你在Apache HTTP和Nginx Web服务器中实现CORS标头, 以提高安全性。你可能还对应用OWASP建议的安全标头感兴趣。