在没有SSH访问的托管上,一个共同的模式是用Playwright打开(WordPress更新屏幕)并直接从页面文本上读出"WordPress核心目前运行的是哪个版本".
在一次部署中,被录制出的核心版本作为类似的东西又回来了——WordPress核心从未存在过的数字.
注意:是WordPress admin的"更新"一页,列出待更新的核心,插件,主题,以及翻译全部在一个屏幕上.
到底发生了什么 该页面不仅显示核心版本字符串——还装有属于待发插件和翻译更新的版本编号.
像"更新插件X到1.7.11"这样的一行是典型的.
这个天真的regex抓住了任何 - 形状的数字先出现在页面上。
由于页面的设置方式,一个插件的待更新可以在核心版本消息上方渲染出,因此(一个插件的版本)最终被收录为WordPress核心版本.
为什么这很难抓住 臭虫不会抛出例外——正格克克成功匹配,只是错误的值.
除非有人注意到报告显示WordPress核心从未运出过(核心没有系列)的版本, 固定器——一个三相的后卫优先选择一个专用的选取器——寻找核心更新消息实际上使,像或倒回关键词-被选中的regex的具体DOM位置——如果没有选取器匹配,只接受一个紧接"WordPress","QQ",或"Version"等词后的数字作为最后的检查——无论哪条路径产生了一个值,通过检查主要版本号的功能运行,WordPress核心的主要版本目前位于4-9的范围内.
插件版本编号倾向于以 1.x–3.x 组合,因此这个单范围检查会自行过滤出大多数假正数.
是什么使得这个设计工作 这不仅仅是"严加管制" 真正的结构是两层防御:以可信赖性为分级取出源(DOM selectioner first),然后验证任何出值的意义,无论产生出哪个路径.
与regex图案相匹配的被拼接的文字并不能保证相匹配的高度正确——即假设直接被烤入代码的结构.
摘要阶段 它的作用是一号 选择器先查找核心更新消息能使 2 的 DOM 特定位置 。
关键词背后 只接受直接跟随"WordPress"/"Version"
3.
Plausibility check 拒绝主版-4–9范围以外的任何内容作为最后的防御,比如Playwright严格模式的违反行为与wp-admin的重复选择器相撞,或者反复出现的"确认您的管理员电子邮件"屏幕会延缓自动化,这从同一个前提开始:wp-admin的屏幕不能被取出面值.
这一次不是被点击的问题,而是被刮去的值实际上意味着什么——在信任它之前验证被刮去的文本的习惯是阻止这种沉默的腐败。
同样的"看起来成功但并不成功"的空白也出现在了不实际选择任何内容的所选的全部复选框中.