web应用HTTP安全响应头配置
最近使用Hermes Agent对网站做了一个安全测试,测试报告中提示没有设置安全响应头,我们今天根据提示来配置一下网站的安全响应头。

一、安全响应头说明
HTTP安全响应头是服务器在HTTP响应中设置的一组指令,告诉浏览器如何处理请求中的页面数据。
1.Strict-Transport-Security(HSTS) — 强制HTTPS
Strict-Transport-Security (HSTS)可以强制要求浏览器使用HTTPS链接,防止协议降级和中间人攻击。
常用参数如下:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload 参数说明:
- max-age:使用HTTPS协议的时间(单位:秒);
- includeSubDomains:策略适用所有子域名;
- preload:将域名加入浏览器内置HSTS预加载列表;
2.Content-Security-Policy(CSP) — 内容安全策略
Content-Security-Policy(CSP)可以通过白名单限制浏览器可以加载哪些资源,可以有效防御XSS攻击。
常用参数如下:
Content-Security-Policy:
"default-src 'self';"
"script-src 'self';"
"style-src 'self';"
"connect-src 'self';" 参数说明:
- default-src:默认安全策略;
- script-src:脚本加载安全策略;
- style-src:样式表加载安全策略;
- image-src:图片加载安全策略;
- connect-src:请求接口地址安全策略;
参数值说明:
- self:仅允许同源(协议、域名、端口一样)加载;
- none:禁止所有链接;
- unsafe-inline:允许浏览器执行页面中内嵌的脚本或者样式;
3.X-Frame-Options — 点击劫持防御
X-Frame-Options可以限制页面被嵌入到iframe、frame标签中,防止点击劫持攻击。
常用参数如下:
X-Frame-Options: DENY 参数值说明:
- DENY:禁止嵌入任何页面,包括自身域名的页面;
- SAMEORIGIN:允许嵌入同源的页面;
- ALLOW-FROM:允许嵌入指定页面;
注:该设置可以由内容安全策略(CSP)中的frame-ancestors参数替代。
4.X-Content-Type-Options — 禁止MIME嗅探
X-Content-Type-Options可以防止浏览器对响应内容的MIME类型进行修改,要求浏览器严格按照服务器设置的Content-Type头进行解析。
常用参数如下:
X-Content-Type-Options: nosniff 参数说明:
- nosniff:禁用浏览器嗅探;
5.X-XSS-Protection — XSS过滤器(已弃用)
这个X-XSS-Protection虽然扫描的时候提示了,但是查了以下已经被弃用了,现在一般使用内容安全策略(CSP)统一控制防护。
6.Referrer-Policy — 控制引用信息泄露
Referrer-Policy可以控制在向外链发起请求的时候,Referer中携带多少信息防止URL中的敏感参数泄露。
常用参数如下:
Referrer-Policy: strict-origin-when-cross-origin 参数说明:
- no-referrer:不发送任何信息;
- no-referrer-when-downgrade:从HTTPS跳转到HTTP协议的时候不发送;
- same-origin:仅同源的时候发送完整URL;
- origin:只发送域名部分,不带路径和参数;
- strict-origin:只发送域名部分,但是从HTTPS跳转到HTTP协议的时候不发送;
- origin-when-cross-origin:同源发送完整URL,跨域只发域名部分;
- strict-origin-when-cross-origin:同源发送完整URL,跨域只发送域名部分,但是从HTTPS跳转到HTTP协议的时候不发送;
- unsafe-url:所有请求都发送完整的URL;
7.Permissions-Policy — 控制浏览器功能权限
Permissions-Policy可以现在网站页面可以使用哪些浏览器的功能API,比如获取地址位置或者调用摄像头等功能。
常用参数如下:
Permissions-Policy: geolocation=(), camera=(), microphone=() 参数说明:
- geolocation:获取地理位置权限;
- camera:获取摄像头权限;
- microphone:获取麦克风权限;
参数值说明:
- ():空列表表示禁用该功能;
- self:仅允许同源页面使用该功能;
- *:允许所有来源使用该功能;
二、Nginx配置HTTP安全响应头
1.nginx配置HTTP安全响应头参考
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self';script-src 'self' 'unsafe-inline' https://matomo.eyyyye.com;style-src 'self' 'unsafe-inline';img-src 'self' data:;font-src 'self';connect-src 'self' https://matomo.eyyyye.com;object-src 'none';frame-ancestors 'none';base-uri 'self';form-action 'self';upgrade-insecure-requests" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; 2.验证配置结果
我们可以打开浏览器F12开发者工具,在网络中查看响应头结果:

或者可以在线工具分析网站HTTP安全响应头配置:https://securityheaders.com/

扩展说明:
1.直接在生产环境配置CSP可能会影响正常业务,可以通过Content-Security-Policy-Report-Only模式查看哪些资源会被影响。
- 本文标签: Nginx Network
- 本文链接: https://blog.eyyyye.com/article/159
- 版权声明: 本文由爱做梦的比特原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
