WordPress 插件更新加了自动安全审查,站长要留意什么

来源:互联网 时间:2026-09-14

9 月 9 日,WordPress 插件团队发了一则公告:以后每一个插件版本在通过官方更新接口分发之前,都要先过一道自动安全审查。对插件作者是流程变化,对用插件的站长来说,真正关心的只有两件事——我的更新会不会变慢,会不会有插件被拦下来。

一、这道审查具体怎么跑

四个环节。

冷却期。从 6 月 5 日开始,每个插件和主题版本在分发前都有一段冷却期,目前是 6 小时。作者提交新版本之后,不会立刻出现在你后台的更新提示里。

审查。冷却期内,这次改动会在 WordPress.org 侧被多个 AI 模型加上 Jetpack Scan 一起分析,几路结果交叉核验,合成一个安全评分。

拦截。评分越高代表风险越大,高分版本在审查结束后自动拦截,不再依赖插件团队有人在线值守。被拦的版本不会通过更新接口分发出去。

通知。被拦时,所有提交者会收到一封说明问题的邮件。作者没收到邮件,就说明这次没被拦。

二、为什么突然加这道关

公告里讲了一次刚发生的事。7 月 28 日,一个大约有两万活跃安装量的插件,某个版本被提交了后门代码。自动审查把这次改动识别出来并给出高分,因为版本还在冷却窗口内,带后门的包从头到尾没有通过更新接口分发出去。Wordfence 通知插件团队之后 26 分钟,该插件被关闭下载。

这次事件暴露的缺口很具体:识别出高风险之后,还得有人在线才能拦得住。公告的原话说的是,一套机制不能依赖插件团队刚好有人值班。所以现在改成高风险结果自动阻断分发。

公告里还有一句值得留意:交叉核验多个工具是为了提高准确率、压低误报,但误报不会降到零。

三、站长会实际感觉到的三件事

更新提示慢半拍。作者在后台点发布之后,你要等冷却期跑完(目前 6 小时)才可能看到这次更新。这不是作者偷懒。

偶尔有插件长时间没有新版本。可能是被拦着,也可能作者本来就慢。这两件事从你自己的后台看不出来,只能去插件页看版本时间。

高分不等于恶意。公告写得很直白:意外引入的漏洞和故意的恶意代码,可能得到一样高的评分;评分衡量的是风险,不是意图。所以看到某个插件被拦,先别直接把它当成有毒。

另外,审查规则会变。官方说这套流程会随数据积累不断调整,作者反馈的误报是最有用的输入。

四、站长这边能做点什么

你没法参与审查,但有三件事值得做。

第一,不要绕开冷却期。有些站为了早点用上刚发布的版本,会去第三方站下载安装包手动上传。这样做等于主动放弃了这道审查——而审查恰恰是在这 6 小时里跑的。

第二,定期比对本地插件和官方仓库的状态。下面这段脚本查的是你列出的插件在官方仓库里的最近更新时间,以及是否已被关闭下载。

<pre style1="background-color:#282c34;color:#abb2bf;padding:16px 20px;border-radius:8px;overflow-x:auto;font-family:Consolas,'Courier New',monospace;font-size:14px;line-height:1.7;margin:16px 0;-webkit-overflow-scrolling:touch;"><code style1="font-family:inherit;"><span style1="color:#7f848e;font-style:italic"># 检查插件在 WordPress.org 官方仓库的最近更新时间与状态</span>
import json, urllib.parse, urllib.request

<span style1="color:#7f848e;font-style:italic"># 把列表换成你站上插件的目录名(一般就是插件页地址里的那一段)</span>
PLUGINS = [<span style1="color:#98c379">&quot;classic-editor&quot;</span>, <span style1="color:#98c379">&quot;wordpress-seo&quot;</span>, <span style1="color:#98c379">&quot;wp-super-cache&quot;</span>]

<span style1="color:#c678dd">for</span> slug in PLUGINS:
url = (<span style1="color:#98c379">&quot;https://api.wordpress.org/plugins/info/1.2/&quot;</span>
<span style1="color:#98c379">&quot;?action=plugin_information&amp;request[slug]=&quot;</span> + urllib.parse.<span style1="color:#61afef">quote</span>(slug))
<span style1="color:#c678dd">try</span>:
with urllib.request.<span style1="color:#61afef">urlopen</span>(url, timeout=<span style1="color:#d19a66">10</span>) <span style1="color:#c678dd">as</span> r:
d = json.<span style1="color:#61afef">load</span>(r)
closed = <span style1="color:#98c379">&quot;是&quot;</span> <span style1="color:#c678dd">if</span> d.<span style1="color:#61afef">get</span>(<span style1="color:#98c379">&quot;closed&quot;</span>) <span style1="color:#c678dd">else</span> <span style1="color:#98c379">&quot;否&quot;</span>
<span style1="color:#c678dd">print</span>(<span style1="color:#98c379">&quot;%-22s 最近更新: %-12s 已关闭下载: %s&quot;</span>
% (slug, d.<span style1="color:#61afef">get</span>(<span style1="color:#98c379">&quot;last_updated&quot;</span>, <span style1="color:#98c379">&quot;-&quot;</span>), closed))
except <span style1="color:#e6c07b">Exception</span> <span style1="color:#c678dd">as</span> e:
<span style1="color:#c678dd">print</span>(<span style1="color:#98c379">&quot;%-22s 查询失败: %s&quot;</span> % (slug, e))</code></pre>

这段代码干什么用:拿插件目录名去问官方接口,返回它的最近更新时间和是否被关闭下载。要改哪里:把 PLUGINS 列表换成你站上实际装的插件目录名,数量随意。跑完看什么:某个插件最近更新停在很久以前、同时已关闭下载显示「是」,说明它出过安全事件被下架了,该找替代品了;只是长期没更新、状态正常的,属于作者维护节奏问题,风险另算。

第三,装插件前看版本节奏。一个半年没更新的插件,遇到新漏洞时没人修,比一次更新被拦危险得多。插件安全这件事上,维护活跃度比功能列表更值得看。

相关阅读:《WordPress 7.1 升级前必做的兼容性自查清单

相关文章

标签:

A5创业网 版权所有