安全修复之Web——HTTP Strict-Transport-Security缺失

878 阅读2分钟

背景

启用HTTPS还不够安全

站点通过HTTPS 对外提供服务,用户在访问某站点,往往会直接输入站点域名,而不是完整的HTTPS地址,站点一般会发送301重定向,要求浏览器升级到HTTPS连接。

将所有非安全请求重定向到安全URL是常规做法,但是中间人仍然可以在重定向发生前劫持连接。

image.png

示例场景

你连接到一个免费 WiFi 接入点,然后开始浏览网站,访问你的网上银行,查看你的支出,并且支付一些订单。很不幸,你接入的 WiFi 实际上是黑客的笔记本热点,他们拦截了你最初的 HTTP 请求,然后跳转到一个你银行网站一模一样的钓鱼网站。 现在,你的隐私数据暴露给黑客了。

Strict Transport Security 解决了这个问题;只要你通过 HTTPS 请求访问银行网站,并且银行网站配置好 Strict Transport Security,你的浏览器知道自动使用 HTTPS 请求,这可以阻止黑客的中间人攻击的把戏。

HTTP Strict Transport Security

Strict-Transport-Security响应报头(通常缩写为 HSTS)是一种安全功能,可以让一个网站告诉大家,它应该只使用 HTTPS,而不是使用 HTTP 进行通信的浏览器。

语法

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

指令

  • max-age=<expire-time>

    设置在浏览器收到这个请求后的秒的时间内凡是访问这个域名下的请求都使用 HTTPS 请求。

  • includeSubDomains 可选

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

配置示例

  • apache : 31536000 seconds = 12 months

Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains"

  • nginx :

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

  • lighttpd :

setenv.add-response-header = ("Strict-Transport-Security" => "max-age=31536000; includeSubdomains",)