一、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";