就在刚才,我接到了一个紧急电话,是服务器商打来的。对方语气很严肃,说监测到我的网站出现了非法内容,要求立即清理,否则就要关停站点!
当时我心里一惊:网站明明运行正常,内容也都是正规的,怎么可能有非法内容?
挂掉电话,我立刻登录后台、检查服务器文件,折腾了一圈都没发现问题。最后,按照服务商给的线索,我打开了网站的 Feed 订阅源(就是那个 /feed 地址)。
查看页面源代码后,一行不起眼的代码让我瞬间明白了问题所在:
xml
xmlns:wfw="http://wellformedweb.org/CommentAPI" 我下意识地复制这个 wellformedweb.org 到浏览器里打开------页面直接跳转到了一个赤裸裸的菠菜(博彩)网站!
这下我全懂了。问题就出在这个已经存在了超过15年、被WordPress硬编码在RSS Feed里的远古链接上。
一个15年的"老古董",为何成了定时炸弹?
这个 wellformedweb.org 是什么来头?简单说,它是上古时期(约2003年)为博客RSS订阅实现评论功能的一个技术规范网站。因为历史原因,WordPress为了兼容性,一直在Feed中硬编码了指向它的链接。
本来这也没什么,无非是个过时的技术遗产。但问题在于,这个域名早已被人遗忘,原持有者没有续费。现在,它被黑产团伙盯上并抢注了,摇身一变成了菠菜站。
虽然它只是一个"命名空间声明",不会直接给你的网站挂马,也不会让读者自动跳转。但关键在于,云服务商的安全扫描、搜索引擎的爬虫,会无差别提取你页面里的每一个URL。一旦扫到这个URL指向非法内容,就会判定你的网站"涉黄涉赌",轻则警告整改,重则直接封禁域名!
这是一个不是你干的,却要你背锅的"无妄之灾"。
影响有多大?几乎波及所有WordPress站点
毫不夸张地说,只要你的网站用的是WordPress,无论版本新旧,无论是否更新了补丁,只要没有手动处理过,99%的站点都存在这个问题。
我随手查了几个朋友的站,一查一个准。这不是危言耸听,这是WordPress官方代码里留下的"历史包袱"。
怎么解决?三套方案,站长请自取!
发现问题后就要立刻解决。网上有些教程教直接改WordPress核心文件(/wp-includes/feed-rss2.php),我强烈不建议这么做。一来容易手误改坏网站,二来下次WordPress一升级,修改就被覆盖了,白忙活。
这里推荐两种优雅且一劳永逸的方法:
方案一:Code Snippets插件法(最推荐,适合所有人)
这是最安全、最简单的方法,不需要折腾代码,直接复制粘贴即可。
-
安装并启用 Code Snippets 插件。
-
添加一个"新代码片段"。
-
将以下代码完整粘贴进"代码"框,然后选择"在前端执行",保存并激活。
php
/** * 完美清理 WordPress RSS 中菠菜域名 wellformedweb.org 的引用 * 代码来源:秋风于渭水(感谢贡献) */ add_action('template_redirect', 'perfect_clean_rss2_buffer', 0); function perfect_clean_rss2_buffer() { if (is_feed('rss2')) { ob_start('rss2_namespace_cleaner'); } } function rss2_namespace_cleaner($buffer) { // 1. 移除开头的命名空间声明 $search_pattern = '/xmlns:wfw="http:\\/\\/wellformedweb\\.org\\/CommentAPI\\/?"\\s*/i'; $buffer = preg_replace($search_pattern, '', $buffer); // 2. 移除每篇文章下的评论RSS标签 $comment_pattern = '/<wfw:commentRss>.*?<\\/wfw:commentRss>\\s*/i'; $buffer = preg_replace($comment_pattern, '', $buffer); return $buffer; } 保存后,去刷新一下你的Feed页面,查看源代码,那行该死的代码就消失啦!
方案二:修改当前主题的 functions.php
如果你不想装插件,也可以把上面这段代码,添加到当前启用主题的 functions.php 文件末尾。注意:更换主题时可能会失效,记得换回来时重新加一下。
方案三:Nginx 用户专属(服务器端)
如果你对服务器有管理权限,且用的是Nginx,可以在配置文件中加入以下替换规则,从源头过滤,性能更好:
nginx
location ~* /feed/?$ { sub_filter 'xmlns:wfw="http://wellformedweb.org/CommentAPI/"' ''; sub_filter_once off; sub_filter_types application/rss+xml text/xml; try_files $uri $uri/ /index.php?$args; }
写在最后
这次事件给我们所有站长敲响了警钟:互联网没有永恒的朋友,只有永恒的利益。我们依赖的任何一个外部资源、域名,哪怕它是官方写死在代码里的,都有可能在多年后变质,成为攻击我们的武器。
各位站长,如果你看到这篇帖子,请务必立刻检查一下自己的网站!不要等到服务商打电话、甚至直接封站时才后悔莫及。
自查方法:在浏览器中打开 https://你的域名/feed/,右键查看网页源代码,搜索 wellformedweb.org。如果能搜到,你就要马上动手清理了。