Content Views 安全通知
如果您收到了我发来的指向此页面的电子邮件,是因为您的网站似乎正在运行 Content Views – Post Grid & Filter(由 Content Views / PT Guy 开发的 WordPress 插件,位于您的文件
/wp-content/plugins/content-views-query-and-display-post-page/ 中)的一个版本,该版本处于已知安全问题的受影响范围内。本页面解释了该问题是什么、如何判断它对您的网站有多大影响、如何正确读取您的版本而不被误导,以及如何更新。
该问题是 CVE-2026-15361,即插件预览处理中的一个 SQL 注入漏洞。它影响 4.5 之前的所有版本,并在 4.5 版本中修复,该版本于 2026 年 7 月 28 日发布。如果您正在运行早于 4.5 的任何版本,请 将 Content Views 更新到 4.5.1 或更高版本,这是撰写本文时的当前发布版本(2026 年 8 月 4 日)。此问题 没有公开的 CVSS 评分,因此我不会向您引用一个分数,并且我也不知道有任何公开的利用代码。
没有任何更旧的版本是安全的。 这不是一个在插件历史进行到一半时才引入、后来才修复的缺陷。我检查了插件历史上每一个已发布的 版本标签,从 2014 年最早的版本一直到 4.4,受影响的代码存在于所有这些版本中。“我的安装版本太旧,不会受影响”在这里并不是一条 出路。唯一不受影响的版本是 4.5 及更新版本。
在其他一切之前,先说明决定这件事对您的网站有多重要的限定条件,因为我宁愿明说,也不愿让这份通知听起来比实际情况更严重: 此漏洞只能被已登录您网站的人利用。 他们的账号平时能做什么并不重要,WordPress 最低的角色权限就已足够,但他们确实需要拥 有一个账号。因此,决定您暴露程度的问题不是插件中的任何设置,而是 谁能够在您的网站上获得账号。我可以从公共文件中读取您 的插件版本,也能看出 WordPress 是否提供其标准注册页面,但我无法看到谁在您的网站上持有账号,因此这份通知是一种预防性的提 醒,而不是针对您网站的确认性发现。
请注意这个限定条件 不是 什么。没有可以关闭的选项,没有可以取消发布的功能,也没有任何配置能让您脱离受影响范围。无论您是 否曾在页面上放置过文章网格,受影响的处理程序都会在每一个受影响版本的安装中注册。如果您想寻找一个可以关闭的复选框,您找不 到,因为根本没有这样的东西。更新才是修复方法。
关于紧迫性,说明一点:这是一条有条件的通知。如果您是网站上唯一拥有账号的人,并且没有其他人能够获得账号,那么更新只是普通 的插件维护。如果您的网站接受其他人注册,请将其视为优先事项,并请注意,注册的形式不止表面上那一种:WooCommerce 商店、会 员或论坛插件、多作者博客,以及自定义注册页面,都可以在完全不涉及 WordPress 自身注册表单的情况下创建账号。
如果您确实向访客开放了 WordPress 的注册页面,而您并不需要它,将其关闭是一个合理的临时措施,因为这会缩小能够触及此问题的 人群范围。不过,请不要把这当作一份“健康证明”。关闭注册只是关闭了通往账号的几扇门中的一扇,它对已经存在的账号毫无作用。更 新插件才能真正消除这个问题。
同样值得精确说明的是,这个问题是什么、不是什么。它让一个拥有低权限账号的人能够 读取 出他们的账号本不应该看到的、您网 站数据库中的数据。这一点值得修复,因为 WordPress 数据库中保存着用户电子邮件地址和哈希密码等内容,在有些网站上还有会员或 客户记录。但这不是管理员账号被接管,不是有人能借此给自己授予管理员账号的方法,也不是远程代码执行。它比我在其他地方写到的 那些完全沦陷类问题范围要窄得多,我宁愿如实说明其严重程度,也不愿让您留下比事实更可怕的印象。
这是一个 插件 漏洞,而不是 WordPress 核心漏洞。即使 WordPress 完全保持最新,只要 Content Views 插件本身处于受影响版本, 也 不会 保护您。
这封邮件是真实的吗?
是的。这是独立安全研究人员发出的善意、负责任披露通知。我 不会 向您索要金钱、密码或网站访问权限,我也 没有 尝试破解 它、在其上注册,或利用任何东西。
我所做的只是查看您的网站向每位访客公开提供的页面和文件(与您的主页公开的方式相同),并记录插件发布的版本号。我读取的页面 之一是您网站标准的 WordPress 注册页面,以查看它是否向访客开放,而阅读它就是我对它所做的全部事情。我特意 没有 提交该表 单,没有创建账号,没有登录,也没有向受影响的功能发送任何内容。此检查的任何部分都不会触及您的数据、您的后台或您网站的任何 私有部分(更多详情见下方的 我做了什么、没做什么)。
如果您想验证我的身份,请参阅此页面底部的联系方式和 关于 页面。
为什么这很重要
Content Views 在您的网站上构建文章网格、列表和滚动展示,让您无需编写任何代码即可显示经过筛选的文章或页面。它实现这一点的 部分方式是一个请求处理程序,该处理程序会根据传入的设置渲染网格的预览。
在受影响版本中,该处理程序只检查一个安全令牌,检查到此为止。它从不检查发送请求的人是否被允许使用它,而且这个令牌并不是 秘密:插件会将其发布给网站的每一位访客。随后,该处理程序会直接用请求中的设置构建一条数据库查询。其后果是,仅仅持有您网站 上最低权限账号的人,就能操纵这条查询,读取出他们的账号本不该看到的数据库数据。
这里的前提条件值得重复一遍,因为它是最容易被朝任何一个方向误读的部分:是一个账号,而不是一项配置。 无需启用任何东西 即可触及该处理程序,也没有任何设置能让受影响版本脱离范围。挡在受影响安装与此问题之间的,仅仅是除您之外是否有人能够登录。 在任何人都可以注册的网站上,这算不上什么障碍。而在只有您一个用户的网站上,这才是真正的屏障。
而同样重要的是另一面:关闭了 WordPress 注册表单的网站 并不会 因此而安全。账号可以通过多种途径产生,其中任何一种都足 够。
我以网站所有者需要采取行动的水平描述这一点,不再深入。我不会发布允许他人重现此问题的细节,也希望您不要尝试在自己的网站 或他人的网站上进行尝试。按照下面的描述读取您的版本号,会告诉您决定采取什么行动所需的一切信息。
如果我的电子邮件引用了此问题,这意味着您网站报告的版本早于 4.5。我没有测试您的特定网站是否可利用,我也无法看到谁在其上拥 有账号。我所观察到的只是版本,以及您的注册页面是否会提供给访客。
我受影响吗?
这归结为一个问题:您正在运行哪个版本的 Content Views?
先简单说明一下这里指的是哪一个插件,因为这个名称并非独一无二。此通知针对的是发布在 WordPress.org 上的免费插件,其文件夹
为 content-views-query-and-display-post-page。同一供应商还销售一条单独的 Pro 产品线。如果您的插件文件夹正是这一个,请
继续阅读。
从 WordPress 后台查看(权威来源):
- 登录您的 WordPress 仪表盘(通常在
yourdomain.com/wp-admin)。 - 进入 插件,然后是 已安装的插件。
- 找到 Content Views – Post Grid & Filter,其文件夹为
content-views-query-and-display-post-page的条目,并记下其名称下方显示的版本。
从公共清单查看(无需登录): 在浏览器中打开
yourdomain.com/wp-content/plugins/content-views-query-and-display-post-page/README.txt
并阅读顶部附近的 Stable tag: 行。这是我读取的两个公开来源之一。
请留意这个文件名中的大写字母。 WordPress 插件通常会附带小写的 readme.txt,这也是大多数人出于习惯输入的网址。而这款
插件的 4.x 版本包将该文件命名为大写的 README.txt,因此在区分大小写的主机上,小写地址会返回 404,看起来就像该文件不
存在一样。它其实是存在的。在下任何结论之前,请先尝试大写的拼写。
从您的页面源代码查看(无需登录): 查看您主页的源代码,并查找插件自身的前端资产,路径恰好为:
/wp-content/plugins/content-views-query-and-display-post-page/public/assets/js/cv.js?ver=...
/wp-content/plugins/content-views-query-and-display-post-page/public/assets/css/cv.css?ver=...
附加到 这些 文件上的 ?ver= 数字就是插件自身的版本。在默认安装中,无论页面上是否出现文章网格,它们都会在每个前端页
面加载,因此您的主页通常就足够了。在非常旧的安装中,这两个文件名为 public.js 和 public.css,同样的规则也适用于它们。
这里有一个需要避免的陷阱,而且很容易掉进去。 这款插件在 自己的插件文件夹内 捆绑了若干第三方库的副本,每一个都带有
自己的、与插件完全无关的版本号。您的页面源代码中可能会显示 Bootstrap 版本 3.3.5 或 3.3.0、Select2 版本 3.4.5、html5shiv
版本 3.7.0、respond.js 版本 1.4.2,以及 bootstrap-paginator 版本 0.5,它们的路径全都以 Content Views 插件文件夹开头。如
果运营者在页面源代码中搜索插件文件夹,并读取第一个出现的 ?ver= 值,很容易就会误以为插件是“3.3.5”版本,然后再困惑于这
该如何与 4.5 比较。这两者根本无法比较。像 3.3.5 或 0.5 这样出现在 bootstrap 或 select2 路径上的数字,是另一款软件的版
本。只在 cv.js 或 cv.css 上读取版本(在非常旧的安装上则是 public.js / public.css),并忽略页面中其他所有的
?ver=。
如果您完全无法从页面源代码中获得可读的数字,这很常见,也不说明任何问题:缓存和优化插件经常会剥离资产网址上的 ?ver= 值,
或者将文件打包成一个合并的脚本。在这种情况下,README.txt 是可靠的公开读数,而第一项检查中的后台界面始终有答案。
然后应用此规则,并注意版本比较是 数值上 的,而不是字母上的,因此 4.10 会比 4.9 更新,尽管它作为文本看起来更小:
- 早于 4.5 的任何版本: 受影响。请更新。不存在某个更旧的版本以下就会重新变得安全的分界线。
- 4.5 或更新: 就本问题而言已修复。撰写本文时的当前发布版本是 4.5.1,采用最新的可用版本是最佳选择。
如何升级
该插件是免费的,仍在发布中,并得到积极维护,因此修复方法是一次常规更新。最安全的做法是通过 WordPress 本身进行更新,并 先进行备份:
- 在做出更改之前备份您的网站(文件和数据库)。大多数主机提供商提供一键备份功能,或者您可以使用 WordPress 备份插件。
- 在 WordPress 后台,转到 仪表盘 然后 更新,或 插件 然后 已安装的插件。如果列出了 Content Views 的更新, 请从此处安装。
- 如果您更喜欢使用命令行,WP-CLI 也可以完成同样的操作:
wp plugin update content-views-query-and-display-post-page(该命令使用文件夹名称,而不是显示名称)。 - 如果没有出现更新,您可以直接从 WordPress.org 目录中的插件页面获取最新版本, Content Views – Post Grid & Filter, 然后通过 插件 然后 安装插件 然后 上传插件 进行更新。
- 更新后,使用上述步骤确认新版本号(4.5.1 或更高版本),并检查您的文章网格以及网格上的任何筛选器是否仍正常显示。
趁着在后台,也值得确认 WordPress 核心 和您的其他插件是否都已是最新版本,因为同样的原则适用于它们全部。
更新之后
更新到 4.5.1 或更高版本即可解决该问题,对于大多数网站来说,这就是全部任务。此页面是一份预防性通知,而非事故报告:我无法 得知您的网站上是否发生了任何事情,我也没有查看。
趁着更新还新鲜,有两件小事值得做:
- 确认版本确实发生了变化,使用上述检查中最简便的一种,并加载一个显示您某个文章网格的页面,确保它仍能正常渲染。
- 如果您开放了 WordPress 注册功能且并不需要它,可以考虑将其关闭。这是一般性的卫生措施,而不是针对此问题的修复(更新 已经处理了这个问题),值得记住的是,您网站上的其他插件仍可能创建账号。
您会注意到这个页面上没有“假设您已被入侵”的检查清单,这是刻意为之,而不是遗漏。这个问题带来的是一次可以从低权限账号触及 的数据库读取。它不会把管理员账号交给任何人,也不会在您的服务器上运行代码,因此我在被接管类缺陷之后建议的管理员审查和密 码轮换流程,在这里并不相称。更新、确认,然后照常进行即可。
我做了什么、没做什么
为了完全透明地说明我邮件背后的检查过程,以下就是全部内容。我读取了您的网站已经向每位访客提供的页面和文件:
- 您的主页,以及写入其中的资产地址;
- 插件公开的
README.txt,位于wp-content/plugins/content-views-query-and-display-post-page/内; - 您网站位于
/wp-login.php?action=register的 标准 WordPress 注册页面,以查看它是否向访客开放。这是一个已发布的 页面,阅读它就是我所做的全部事情。
我 没有 提交该注册表单,没有 创建账号,也 没有 登录您的网站。我 没有 向受影响的功能发送任何内容。最后这一 点是我最想说清楚的:这个问题是一个 SQL 注入的注入点,而向别人的数据库发射攻击载荷,无论是在实验室还是在生产环境中,都不 是这个项目会做的事情。没有任何东西被提交、测试或利用,也没有任何东西触及您的 WordPress 后台、您的数据库,或网站的任何私 有部分。
我还故意不发布那些会帮助他人利用此问题的细节。上面的描述仅停留在网站所有者需要的级别,并且我没有链接任何概念验证代码。
这是一项 基于版本的观察:您的网站报告的版本早于 4.5。这并不意味着在我检查时您的网站是可被利用的。因为利用此问题需要 有人登录,而我无法看到谁在您的网站上持有账号,所以处于受影响范围内的网站可能根本没有暴露,并且处于该范围内的网站也可能 已通过其他方式(如 Web 应用防火墙或回溯移植的修复)单独受到保护。
我没有网站管理员 / 我卡住了
如果您不是负责维护网站的人,请将此页面转发给负责的人(您的网站开发人员、机构或主机提供商)。他们会很快识别出上述步骤。
如果您自己维护网站并遇到困难,我很乐意免费帮助您指明正确的方向。请使用下面的联系方式联系我。
联系方式
Evan Harris,安全研究员
- 邮箱:security@mail.mcpsec.dev
- X:@Evan__Harris
- GitHub:eharris128
- LinkedIn:Evan Harris
我就此类问题主动联系,纯粹是为了帮助运营者保护自己的网站。如果您不希望再次收到联系,请告诉我,我会遵从。
参考
官方公告与追踪
开发者 / 插件