为什么轮换 salt 和密钥,是被用得最少的 WordPress 安全举措

WordPress 的 salt 和密钥保护着你网站上的每一个会话。几乎没人去改动它…

A padlock on a laptop, representing WordPress security keys

打开任何一个 WordPress 网站的 wp-config.php 文件。大约在中间位置,有一段由八条定义组成的代码,名字形如 AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT 和 NONCE_SALT。每一条都是一长串随机字符。这就是 WordPress 的 salt 和密钥。它们保护着你网站签发的每一个身份验证 cookie 和每一个 nonce。而在网站初次安装之后,几乎没人再去改动它们。本文将说明它们究竟做什么、为什么轮换很重要,以及如何安全地进行轮换。

salt 和密钥的作用

当你登录 WordPress 时,网站会设置一个 cookie,用来证明你的会话有效。这个 cookie 里含有一个令牌。该令牌是用 wp-config.php 中密钥与 salt 的组合来签名的。若不同时掌握这两者,攻击者既无法伪造出有效的 cookie,也无法在不使其失效的前提下篡改现有的 cookie。

WordPress 还用这同一组机密来生成和校验 nonce——那种保护表单提交和后台操作、抵御跨站请求伪造(CSRF)的一次性令牌。它们是 WordPress 诸多安全机制的根基。

一旦这些机密泄露,任何用它们签名的令牌,在机密被更换之前都会一直有效。这正是轮换所关切的部分。

机密可能在什么时候泄露

你也许觉得自己的 wp-config.php 从未被暴露过。刻意的暴露,大概确实没有。但有若干常见情形,都可能让这个文件的内容泄露出去。

一个躺在根目录里的备份压缩包。哪怕它只在很短的窗口内可被下载,任何猜出文件名的人就拿到了这个文件。我们见过用可预测时间戳命名的备份包,任何攻击者都能逐一枚举出来。

一台配置错误的服务器,把 PHP 文件当作纯文本返回,而不是执行它们。部署过程中短暂的配置失误,其实出奇地常见。

某位开发者或外包人员被入侵的笔记本电脑。wp-config.php 多年来一直躺在网站的一份本地副本里。他们的机器一旦被攻破,这个文件也就一并沦陷。

网站自身此前的一次入侵。只要攻击者在过去某个时点拥有过文件系统访问权,他就读到过 wp-config.php,从此便永远握有你的机密——除非你做过轮换。

轮换究竟做了什么

轮换 salt 和密钥会做两件重要的事。第一,它会使网站上现有的每一个会话失效。每一位已登录的用户,包括仍在利用被窃取 cookie 的任何攻击者,都必须重新登录。第二,它会使每一个待处理的 nonce 失效。任何依赖轮换之前所签发令牌的表单提交,都会被拒绝。

第一个效果,正是这项安全收益之所在。如果某个攻击者在轮换之前握有一个有效的会话 cookie,那么轮换之后,他就不再拥有它了。

这恰恰是轮换如此有价值的原因:它切断了一个已泄露的机密所悄然赋予的持久访问权。

代价很小

轮换带来的阻力,就是重新登录一次,仅此而已。每一位用户,包括你自己,下次访问网站时都会被登出。他们用平常的凭据重新登录,就又回来了。

对个人博客来说,这几乎无感。对有多名员工的企业网站,则发一封简短邮件,预告改动即将进行、届时需要重新登录。提前五分钟知会,就能避免混乱。

如何轮换

操作很简单。访问 WordPress 官方的密钥生成器,网址是 api.wordpress.org。每次加载它,都会生成全新的一组八条定义。复制整段。通过 SFTP,或经由你主机的文件编辑器,打开服务器上的 wp-config.php。用新的一段替换掉原有的那段,保存文件。

在下一次页面请求时,现有的每一个会话都会失效。你下次打开后台时,就要重新登录。

在生产环境这么做之前,先给 wp-config.php 做一份备份。风险在于你可能把新的一段粘错位置、弄坏文件。有了备份,你就能即刻回滚。

多久轮换一次

对一个低风险的小站点,一年轮换一次是合理的基线。对有多名用户的企业网站,则每季度或每半年一次。对管理员来来去去、流量很大的网站,则在每次人员变动之后进行。

出现下列任一情况后,务必轮换:一次已确认或疑似的入侵;一位拥有管理员权限的员工或外包人员离职;一个备份文件出现在了它本不该出现的位置;任何一次涉及通过不安全通道传输文件的重大服务器迁移。

与其他加固手段配合

轮换 salt,是若干「投入小、见效大」的举措之一,几项一起用时会互相叠加放大。把它与以下做法搭配:给每个管理员账户开启 2FA、定期更新插件与核心、审查一遍谁拥有访问权,以及保持一份干净、不躺在任何公开文件夹里的 wp-config.php。

它花在时间上的总成本,是一年一两个小时。而它的价值,是堵上 WordPress 中最经久不衰的一类被入侵途径。廉价、简单,却几乎无人不跳过。

需要帮忙吗?

如果你希望有人把轮换 salt 和密钥,作为一次更全面的安全清理的一部分,来为你的 WordPress 网站完成,Defyn 可以来做。这是我们在每一次接手网站时都会顺手完成的小活之一。

Claire Smith 的头像
Sponsored Loved this story? Defyn turns articles like this into the websites your competitors wish they had. Talk to us → defyn.com.au