打开任何一个 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 可以来做。这是我们在每一次接手网站时都会顺手完成的小活之一。



