原创

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模式查看哪些资源会被影响。

正文到此结束
本文目录