运维笔记:为博客启用HSTS

最近除了继续维护第一个插件的过滤字典(参考运维笔记:第一次开发WordPress插件),我还喜欢用一个叫Wappalyzer网站分析工具,来看看一些知名站点所使用的工具。也就是在这样的机缘巧合下,我发现不少主流门户网站都启用了HSTS(HTTP Strict Transport Security)安全机制,以强制用户通过HTTPS访问站点。

早在几年前,我已经将301跳转HTTPS的规则写入Apache配置文件,但这仅仅是一种重定向方案,对于会话劫持/中间人攻击来说,几乎起不到防护的作用。了解了HSTS之后,我也跃跃欲试,想把它应用到我的博客上。HSTS的运作是通过名为Strict-Transport-Security的响应头来实现的,而要添加这个响应头,大概有三种方式:

1、直接修改主题文件夹内的functions.php

这个方法简单快捷,但主题一旦更新,所有自定义修改都会被覆盖,再者,官方建议任何功能性的修改最好通过插件方式完成。

2、自定义小插件

有了上次插件开发经验,写一个小功能已是轻轻松松

function enable_hsts() {
header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
}
add_action( 'send_headers', 'enable_hsts' );

关于max-age,RFC 6797中给出的良好实践是15768000(六个月)和31536000(一年)。在实践中,max-age的值通常设置为31536000,见过最长的是维基百科的106384710。

在启用插件后,我先是在开发者工具里确认了Strict-Transport-Security响应头。为了进一步保障实施成功,我又在几个HSTS检测网站上进行了检验,看下HSTS标头能否被外部工具成功检测,但问题出现了,不知何故,不是每个检测网站都能检出HSTS标头。初步猜测是和wordpress的加载有关。

3、写入Apache配置文件

之前我已经通过.htaccess实现了隐藏掉X-Powered-By标头,并新增article-by和X-XSS-Protection的功能,这次也仅仅是添加一行规则到文件中:

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

解决啦!在服务器层面添加的标头,可以成功被各种第三方工具检测到。

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注