论我是如何通过sylar高性能服务器框架学习记录:定时器模块这篇博客对自己发动XML注入攻击的
bug场景
正常来说我在本地用Typora写好文章之后只需要将文章复制到wordpress后台的文章发布界面,点击发布,然后就能在博客首页看到新发布的博客文章
但是今天我在推送sylar高性能服务器框架学习记录:定时器模块这篇博客之后,刷新博客首页,博客的前端渲染居然出错了,以下是场景复现:

可以看到网页排版布局完全错乱,博客也没有完全加载,点击按钮后可以跳转到其他界面,但是错误渲染的黑框仍然存在并且其他组件都无法正常显示
尝试debug
这种情况以前也发生过,原因是我安装了Markup Markdown这款插件,它的作用是替换wordpress自带的文本编辑器(类似word)成Markdown编辑器,同时将博客页面里的Markdown进行渲染,而安装了这款插件之后是不能存在非Markdown语法写的博客的,否则就会渲染出错,我在博客网站搭建记录这篇博客里就记录过这个现象
但是所有博客都是用markdown语法编写的,为什么会这样呢
我突然想到今天早些时候折腾了一些博客文章目录的插件(最后没找到合适的,全禁用了),其中有的插件提供了wordpress短代码(简码)功能,这是一种类似标签的字符串,比如[toc]就是Table of Content插件提供的短代码,可以将其嵌入文章,组件或其他地方,网页加载的时候wordpress会把这些短代码解析成HTML,css以及js,是一种方便的页面编辑机制
有没有一种可能,我开启过这些插件,导致博客文章内容被嵌入了短代码,导致了markdown语法被污染?我觉得非常有可能,于是我就把所有的博客都删除,重新发布一遍,起初一切正常,渲染没有出错,博客一篇一篇被我发布,直到我再次发布sylar高性能服务器框架学习记录:定时器模块这篇博客后,bug又回来了,我直接红温

我心想可能是我在重新发布的时候是直接复制前端界面的文字,带上了什么不干净的东西的原因,于是开了电脑用里面的.md源文件来复制,这次我先试了发布之前保证没有问题的文章,一切正常,随即我又发布了sylar高性能服务器框架学习记录:定时器模块这篇文章,然后bug就又来了
这给我整晕了,为什么偏偏就这篇文章不行呢,我开始上网搜索相关技术帖子试图找到问题的根源,网上都在说可能是php文件被插件修改了,于是我开始一个个排查插件,结果由于不会php,排查过程非常不顺利,bug也一直在,搞得我很烦,甚至已经准备打开B站速成php语法了
发现原因
就在我在绝望中休息的时候,我忽然想起今天写文章的时候typora出现了我没见过的高亮提示

就是上图段落文字里的“尖括号包裹的void”,这个高亮形式我在typora里第一次见,写的时候没太在意,反正又不是报错就没理
现在这是我唯一认为可疑的问题点,于是我决定修改一下

改成了这样,然后再次发布文章,bug就这样被修复了,给爷气笑了,还以为问题在代码,谁知道是文章内容的问题
随即我马上理解了这个“尖括号包裹的void”可能被解析为了一个xml标签,插件Markup Markdown的解析器就是被这个东西整崩溃了,原来不是不能存在用非markdown语法写的博客,是所有内容都不能包含任何非markdown的标记语言
原理
插件Markup Markdown和typora不同,前者是运行在wordpress上,把markdown语法转化为wordpress格式的xml,最后还是交给wordpress渲染,而wordpress不认识“尖括号包裹的void”这个xml标签,导致界面渲染出错;后者是直接渲染markdown,所以不会出问题,谢谢typora好心提供了语法高亮,不然真的想不到
这波属于是被C++模板语法,Markup Markdown插件和wordpress标记语言格式给联合起来坑了,自己对自己发动XML注入攻击了属于是,理解之后我真的力竭了
总结
这个bug的傻逼程度我愿意给它2026年度最傻逼bug的提名


逆天bug(?!强强!?)
逆天昵称
∑(;°Д°)