Nginx & Haproxy 使用HTTP响应头字段来提高Web安全性

巧了我就是萌 提交于 2020-08-11 14:30:08

 

URL: https://securityheaders.com/ 用于检测安全级别 & 配置HTTP响应头字段是否生效.

一.Nginx 使用HTTP响应头字段来提高Web安全性

Step 1.X-Frame-Options

说明:X-Frame-Options HTTP 响应头是用来给浏览器 指示允许一个页面 可否在 , , 或者 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击

  • 语法 X-Frame-Options 有三个值:
X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/
  • 参数说明:

    如果设置为deny,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为sameorigin,那么页面就可以在同域名页面的 frame 中嵌套。

    deny

    表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

    sameorigin

    表示该页面可以在相同域名页面的 frame 中展示。

    allow-from uri

    表示该页面可以在指定来源的 frame 中展示

add_header X-Frame-Options SAMEORIGIN;


Step 2.X-Content-Type-Options 

  • X-Content-Type-Options响应首部相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探行为,换句话说,也就是意味着网站管理员确定自己的设置没有问题。
  • 这个消息首部最初是由微软在 IE 8 浏览器中引入的,提供给网站管理员用作禁用内容嗅探的手段,内容嗅探技术可能会把不可执行的 MIME 类型转变为可执行的 MIME 类型。在此之后,其他浏览器也相继引入了这个首部,尽管它们的 MIME 嗅探算法没有那么有侵略性
  • 点安全测试人员通常欢迎对这个首部进行设置。
  •  nosniff 只应用于 "script" 和 "style" 两种类型。事实证明,将其应用于图片类型的文件会导致与现有的站点冲突。
  • nosniff 下面两种情况的请求将被阻止:
    请求类型是"style" 但是 MIME 类型不是 "text/css",
    请求类型是"script" 但是 MIME 类型不是 JavaScript MIME 类型

add_header X-Content-Type-Options "nosniff" always;

 

Step 3.Content-Security-Policy

说明:Content-Security-Policy 用于控制当外部资源不可信赖时不被读取。用于防止 XSS 跨站脚本攻击或数据注入攻击(但是,如果设定不当,则网站中的部分脚本代码有可能失效)。允许站点管理者控制用户代理能够为指定的页面加载哪些资源 之前的字段名为 X-Content-Security-Policy

  • 语法:

Content-Security-Policy: <policy-directive>; <policy-directive>

参数说明:

通过获取指令来控制某些可能被加载的确切的资源类型的位置

child-src:为 web workers 和其他内嵌浏览器内容(例如用和加载到页面的内容)定义合法的源地址。 如果开发者希望管控内嵌浏览器内容和 web worker 应分别使用frame-src和worker-src 指令,来相对的取代 child-src。

connect-src:限制能通过脚本接口加载的URL。

default-src:为其他取指令提供备用服务fetch directives。

font-src:设置允许通过@font-face加载的字体源地址。

frame-src: 设置允许通过类似和标签加载的内嵌内容的源地址。

img-src: 限制图片和图标的源地址

manifest-src : 限制应用声明文件的源地址。

media-src:限制通过、或标签加载的媒体文件的源地址。

object-src:限制、、标签的源地址。 被object-src控制的元素可能碰巧被当作遗留HTML元素,导致不支持新标准中的功能(例如中的安全属性sandbox和allow)。因此建议限制该指令的使用(比如,如果可行,将object-src显式设置为'none')。

prefetch-src:指定预加载或预渲染的允许源地址。

script-src:限制JavaScript的源地址。

style-src:限制层叠样式表文件源。

webrtc-src:指定WebRTC连接的合法源地址。

worker-src:限制Worker、SharedWorker或者ServiceWorker脚本源

add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;

 

Step 4.Strict-Transport-Security

说明:HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式

 

  • 语法:

trict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload

参数说明:

max-age=<expire-time>:设置在浏览器收到这个请求后的<expire-time>秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。 当HSTS头设置的过期时间到了,后面通过HTTP的访问恢复到正常模式,不会再自动跳转到HTTPS >###### includeSubDomains 可选 >如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。

preload 可选:查看 预加载 HSTS 获得详情。不是标准的一部分

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";


Step 5.Referrer-Policy

说明:Referrer-Policy 首部用来监管哪些访问来源信息——会在 Referer 中发送——应该被包含在生成的请求当中

  • 语法:

Referrer-Policy: no-referrer
Referrer-Policy: no-referrer-when-downgrade
Referrer-Policy: origin
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: same-origin
Referrer-Policy: strict-origin
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: unsafe-url

  • 参数说明:

no-referrer:整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。 no-referrer-when-downgrade (默认值) 在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)。

origin:在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。

origin-when-cross-origin:对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。

same-origin:对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。

strict-origin:在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。

strict-origin-when-cross-origin:对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。

unsafe-url:无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。 这项设置会将受 TLS 安全协议保护的资源的源和路径信息泄露给非安全的源服务器。进行此项设置的时候要慎重考虑。

add_header Referrer-Policy "no-referrer-when-downgrade" always;


Step 6.nginx 配置文件模版

server {
        listen 443  ssl;
        charset utf-8;
        server_name *.gaks.com;
        access_log /usr/local/nginx/logs/gaks-access.log main;
        error_log  /usr/local/nginx/logs/gaks-error.log;

        ssl on;
        ssl_certificate /usr/local/nginx/conf/vhost/sslkey/gaks/fullchain.crt;
        ssl_certificate_key /usr/local/nginx/conf/vhost/sslkey/gaks/private.pem;

        add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header Referrer-Policy "no-referrer-when-downgrade" always;


 location / {
        proxy_pass https://gaksServer;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream off;
        }
      }



二. Haproxy 使用HTTP响应头字段来提高Web安全性

Step 1.X-Frame-Options

  • Haproxy X-Frame-Options  配置添加与Nginx 不一样;
  • 在backend添加
     
  • X-Frame-Options 有三个值:

    DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许

    SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示

    ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示

http-response set-header X-Frame-Options DENY


Step 2.Content-Security-Policy

http-response set-header Content-Security-Policy:script-src https://www.google-analytics.com;https://q.quora.com 


Step 3.X-Content-Type-Options

http-response set-header X-Content-Type-Options: nosniff


Step 4.Strict-Transport-Security

http-response set-header Strict-Transport-Security "max-age=15768000" 


Step 5. Referrer-Policy

http-response set-header Referrer-Policy no-referrer-when-downgrade


Step 6.Haproxy配置文件模版


backend a_server
        mode http
        stats   uri  /check_ha.php
        balance roundrobin
        cookie  JSESSIONID prefix
        stats   hide-version
        option  httpclose
        option forwardfor
        http-response set-header Content-Security-Policy:script-src https://www.google-analytics.com;https://q.quora.com 
        http-response set-header X-Frame-Options DENY
        http-response set-header X-Content-Type-Options nosniff
        http-response set-header Strict-Transport-Security "max-age=15768000" 
        http-response set-header Referrer-Policy no-referrer-when-downgrade
        server game1 10.190.47.20:80 check weight 5
        server boxx1 10.190.59.89:80 check weight 5

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!