最近在安全测试中发现了一下网站的问题:

nginx header 下划线 nginx add_header always_HTTPS

主要是配置一些参数:这些可以前端配置,也可以在nginx中进行配置

在nginx的server中添加请求头信息:

add_header Content-Security-Policy “upgrade-insecure-requests;connect-src *”;
 add_header X-XSS-Protection “1; mode=block” always;
 add_header X-Content-Type-Options “nosniff” always;
 add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload” always;
 add_header Cache-Control no-store;
 add_header X-Frame-Options SAMEORIGIN;
 add_header Permissions-Policy “geolocation=(),midi=(),microphone=(),camera=(),fullscreen=(self)”;
 add_header Referrer-Policy “no-referrer-when-downgrade”;

Referrer-policy

Referrer Policy是W3C官方提出的一个候选策略,主要用来规范Referrer,简单来说就是规定什么时候发送 Referer 字段,以及发送哪些信息。

最初是只有5种策略的,现在规范增加到9种:

no-referrer
整个 Referer 首部会被移除,Referer 不随着请求一起发送。

no-referrer-when-downgrade (默认值)
在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别(HTTPS -> HTTPS)的情况下,Referer 会被发送,在协议降级(HTTPS -> HTTP)的情况下 Referer 不会被发送。

origin
Referrer 发送的信息只包括协议+域名+端口,不包括其它信息。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。

origin-when-cross-origin
对于同源的请求,会发送完整的URL作为引用地址,但是跨域时候只发送协议+域名+端口。

same-origin
同源请求发送,否则不发送。

strict-origin
在同等安全级别(HTTPS -> HTTPS)的情况下,发送Referrer(协议+域名+端口),但是在协议降级(HTTPS -> HTTP)的情况下不会发送。

strict-origin-when-cross-origin
对于同源的请求,会发送完整的URL作为引用地址;对于跨域请求,在同等安全级别(HTTPS -> HTTPS)的情况下,发送Referrer(协议+域名+端口);在协议降级(HTTPS -> HTTP)的情况下不发送此首部。

unsafe-url
无论协议是否降级,也不管是同源请求还是跨域请求,都发送完整的 URL(移除参数信息之后)作为引用地址,所以这种是一种不安全的协议。

这项设置会将受 TLS 安全协议保护的资源的源和路径信息泄露给非安全的源服务器。进行此项设置的时候要慎重考虑。——
Referrer-Policy,MDN文档

空字符串
相当于没有设置,在没有此类更高级别策略的情况下,默认使用 no-referrer-when-downgrade

Content Security Policy (CSP)

简单来说:CSP 通过告诉浏览器一系列规则,严格规定页面中哪些资源允许有哪些来源, 不在指定范围内的统统拒绝。

其实施有两种途径:

  1. 服务器添加 Content-Security-Policy 响应头来指定规则
  2. HTML 中添加 标签来指定 Content-Security-Policy 规则

配置相关参数,请找度娘