由于服务器管理员没能正确设置 HTTP Strict Transport Security (HSTS),现今大量的 HTTPS 流量都能被轻松劫持。
HSTS 是一个被当前大多数 Web 浏览器所支持的 Web 安全策略,它可以帮助 Web 管理员保护他们的服务器和用户避免遭到 HTTPS 降级、中间人攻击和 Cookie 劫持等 HTTPS 攻击的危害。
1、在 Apache2 中设置 HSTS
编辑你的 apache 配置文件,完成后进行重启服务。
- <VirtualHost _default_:443>
- Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"
- </VirtualHost>
- <VirtualHost *:80>
- [...]
- <IfModule mod_rewrite.c>
- RewriteEngine On
- RewriteCond %{HTTPS} off
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
- </IfModule>
- </VirtualHost>
2、在 Lighttpd 中设置 HSTS
对于 lighttpd 来说很简单,将下述配置增加到你的 Lighttpd 配置文件,完成后进行重启服务
- server.modules += ( "mod_setenv" )
- $HTTP["scheme"] == "https" {
- setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=31536000; includeSubdomains; preload")
- }
3、在 Nginx 中设置 HSTS
Nginx 甚至更简单,将下述行添加到你的 HTTPS 配置的 server 块中,完成后进行重启服务。
- add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
4、X-Frame-Options
X-Frame-Options 头部添加到HTTPS站点,确保不会嵌入到frame 或 iframe,避免点击劫持,以确保网站的内容不会嵌入到其他网站。
Apache
Header always set X-Frame-Options DENY
nginx
add_header X-Frame-Options "DENY";
Lighttpd
server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "X-Frame-Options" => "DENY")
}
5、HSTS申请
注意,提交的申请并不是自动处理的,人工处理也许需要一周到几周,你可以在这个表单提交查询看看是否列入了。或者在你的 Chrome 浏览器中访问 chrome://net-internals/#hsts 查询是否列入。一般来说,即便你已经列入到这个列表,但是依旧需要几个月才能逐渐从 Chrome 的 canary 更新通道更新到 dev 、beta 等通道,直到最后的 stable 通道。