Strict-Transport-Security(HSTS)& X-Frame-Options & X-XSS-Protection

时间:2024-06-13 12:24:09

一、Strict-Transport-Security(HSTS)

1、HSTS介绍

        HTTP Strict-Transport-Security(通常简称为 HSTS)响应标头用来通知浏览器应该只通过 HTTPS 访问该站点,并且以后使用 HTTP 访问该站点的所有尝试都应自动重定向到 HTTPS。  

2、语法

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

3、指令

max-age=<expire-time>
浏览器应该记住的,只能使用 HTTPS 访问站点的最大时间量(以秒为单位)。

includeSubDomains 可选
如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。

preload 可选 非标准
查看预加载 HSTS 获得详情。当使用 preload,max-age 指令必须至少是 31536000(一年),并且必须存在 includeSubDomains 指令。这不是标准的一部分。

4、示例

        现在和未来的所有子域名会自动使用 HTTPS,有效期(max-age)为一年。同时阻止通过 HTTP 访问页面或者子域的内容。

Strict-Transport-Security: max-age=31536000; includeSubDomains

二、X-Frame-Options
1、X-Frame-Options介绍

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

2、语法

X-Frame-Options 有两个可能的值:

#表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
X-Frame-Options: DENY  
#表示该页面可以在相同域名页面的 frame 中展示。 
X-Frame-Options: SAMEORIGIN 

3、示例

注意:使用 <meta> 标签来设置 X-Frame-Options 是无效的!例如 <meta http-equiv="X-Frame-Options" content="deny"> 没有任何效果。不要这样用!只有当像下面示例那样设置 HTTP 头 X-Frame-Options 才会生效。
nginx

add_header X-Frame-Options SAMEORIGIN always;  

#Apache

Header always set X-Frame-Options "SAMEORIGIN" 

三、X-XSS-Protection

1、X-XSS-Protection介绍

        HTTP X-XSS-Protection 响应头是 Internet Explorer,Chrome 和 Safari 的一个特性,当检测到跨站脚本攻击 (XSS) 时,浏览器将停止加载页面。若网站设置了良好的 Content-Security-Policy 来禁用内联 JavaScript ('unsafe-inline'),现代浏览器不太需要这些保护,但其仍然可以为尚不支持 CSP 的旧版浏览器的用户提供保护。

2、语法

禁止 XSS 过滤。

X-XSS-Protection: 0

启用 XSS 过滤。如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。

X-XSS-Protection: 1

启用 XSS 过滤。如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。

X-XSS-Protection: 1; mode=block

启用 XSS 过滤。如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。

X-XSS-Protection: 1; report=<reporting-uri>

3、示例

PHP

header("X-XSS-Protection: 1; mode=block");

Nginx

add_header "X-XSS-Protection" "1; mode=block";