被植入的内容:当被攻破的是网站本身而不是某个广告主时,实际会发生什么

最初的迹象很少来自任何官方渠道。可能是 Search Console 里出现了几个团队里没人记得创建过的陌生网址,也可能是自然流量在常用的仪表盘里毫无明显原因地下滑,又或者是某个广告主写信询问,为什么自己的广告页面跳转到了与网站毫不相干的地方。有时则是访客反馈浏览器拒绝打开该页面。这些都不像是广告主的欺诈行为,也都不像此前讨论过的那种因广告网络投放恶意广告而让网站被标记、而网站自身代码完全无辜的情况。
这是另一种情况,是一个不同的问题,需要不同的解决办法。在这种情况下,确实有东西被添加进了网站自身的文件或数据库,而团队里没有任何人把它放在那里。这一类目录网站哪怕只有一周看起来不可信都承担不起后果:无论是对 Google,还是对本就把这一行业视为高风险的支付处理机构,还是对可能只差一次投诉就会暂停账户的主机服务商都是如此。准确了解到底发生了什么、Google 实际会检查什么、以及解决方案真正按什么顺序起作用,在这里比在普通小企业博客上更有价值,因为顺序搞错的代价更高。
攻击者究竟是怎么进来的,通常并不戏剧化
在这个层面上,几乎没有人会专门针对某个成人分类广告目录网站下手。常见的模式是机器人在公开网络上扫描任何运行着某种已知未修复漏洞软件的网站,就像它扫描餐厅网站或律师事务所博客一样。网站之所以中招,是因为它恰好运行着和上百万其他网站相同的内容管理系统、相同的插件或相同的过时库文件,并不是因为有人专门盯上了它,觉得值得下功夫。
过时的软件是一个真实而常见的因素,但并非全部事实,把它当作全部事实会让一半真正的入侵途径得不到防护。Sucuri 的被黑网站报告,针对其在 2023 年清理的网站发现,39.1% 的受攻陷内容管理系统在感染发生时运行着过时软件,低于前一年的 50.58%。同一份报告还发现,当 Sucuri 仔细审查修复情况时,只有大约 14% 的网站当时仍存在可识别的存在漏洞的插件或主题。换句话说,它清理过的大多数网站,实际上并不是通过运营者会优先想到要修复的那个软件漏洞被攻破的。
事情的另一半是凭证问题。Verizon 发布的 2025 年数据泄露调查报告,统计的是其追踪的所有行业,而不只是网站,结果发现被盗或被猜中的凭证作为攻击者获得最初立足点的方式,略微领先于被利用的软件漏洞:22% 的数据泄露事件对 20%。这个数字并非仅由分类广告网站构成,但它与 Sucuri 在专门针对内容管理系统平台的清理工作中观察到的情况相吻合。一个从个人邮箱账户重复使用的管理员密码,而这个邮箱几年前曾在一次无关的数据泄露事件中外泄,实际上和一个未打补丁的插件同样可能成为入侵途径。
实际的结论是,保护一个网站是两条权重大致相当的战线,而不是一条。补丁更新计划能堵住一半的软件漏洞。而另一套独立的纪律,涉及谁拥有访问权限、密码到底是什么、是否在别处被重复使用,堵住另一半。一个只保持插件更新的运营者只做了一半的工作,而且可能永远都不会意识到这一点,因为无论哪一半被忽略了,警告页面看起来都一模一样。
Google 实际上把这叫什么,以及为什么这和恶意广告是不同的问题
这里已经讨论过另一种 Chrome 警告:那种情况是签约的广告网络通过网站自己的广告位投放具有欺骗性或恶意的广告素材,导致 Google 因为网站从未接触过的内容而将其标记。这不是那种情况。这里是有东西被添加到了网站的页面或数据库中,而运营者对此毫不知情,这正是 Google 垃圾内容政策所定义的被入侵内容:由于网站自身安全上的漏洞,未经所有者许可而被放置在网站上的内容。
Google 的文档区分了三种具体模式。代码注入是指恶意代码,通常是 JavaScript,被直接插入到已有的页面或 iframe 中。页面注入是指网站上被添加了原本不存在的新页面,目的是操纵搜索排名或进行钓鱼,而访客已经熟悉的页面往往不会显示出任何异常的可见迹象。内容注入则更隐蔽:通过 CSS 或 HTML 技巧,在已有页面中添加搜索引擎爬虫可见、但浏览器中查看同一页面的人看不到的隐藏文本或链接。
页面注入通常是运营者最后才发现的模式,值得理解的是攻击者为什么要费这个功夫,而不是干脆自己搭建一个用完即弃的网站。一个已经拥有历史记录、现有反向链接和搜索结果中稳固地位的域名,能把垃圾内容洗入排名的速度远快于一个全新域名,所以攻击者更愿意借用一个现有网站的权重,而不是从零开始建立自己的。这和另一篇文章讨论过的外部链接攻击是不同的机制:在那种情况下,攻击是从外部用其他网站的链接指向目标;而在这里,垃圾页面被构建出来是为了存在于目标自己的域名上,存在于它自己的文件结构之内。
一旦这类内容出现在网站上,后果就会接踵而至。Search Console 的安全问题报告会直接标记该资源,一些页面可能被从搜索结果中剔除,或在搜索结果列表中被替换成警告,而 Chrome 的 Safe Browsing 可能开始向访客展示此前针对广告网络情况描述过的同一个红色中间页,这一次触发的原因是网站确实托管了恶意或欺骗性内容,而不是因为一则经过它展示的问题广告素材。
让警告被解除:真正有效的顺序
Google 自己的指南在顺序上非常明确,而实践中大部分浪费掉的时间,都来自把这些步骤的先后顺序弄错。第一项工作是找到并清除被注入内容的每一个实例,而不只是 Search Console 列为问题示例的那一个样本页面。那个网址只是一个样本,不是完整清单,一次在修复完它之后就停止的清理,通常会让大部分真正的注入内容依然留在原地。
第二项工作是查清攻击者是怎么进来的,并堵住那个具体的漏洞,无论它是一个未打补丁的插件、一份外泄的凭证,还是一个配置错误的权限,因为在不修复入口点的情况下删除垃圾页面,只是把时钟重新归零,直到同一个攻击者,或者同一轮自动化扫描,再次从同一扇门进来。Google 的文档明确指出,修复必须覆盖整个网站,而不仅仅是首页或访客举报过的那个页面,而同一份指南中相关的部分还建议更改每一个与具备管理权限的账户相关联的密码:内容管理系统的登录账号、主机控制面板、FTP 或 SFTP,以及数据库,这正是因为入口点往往就是这些账号之一,而不是症状出现的那个页面。
运营者最常搞反的部分,是什么时候该请求 Google 重新审核。在上述清理工作真正完成之前就请求审核,并不会让任何事情加快;Google 明确表示,在问题仍然存在时请求审核,只会延长网站被标记的时间。审核所需时间因类别而异:普通恶意软件的审核通常需要几天,钓鱼问题的审核大约一天,但包含被注入垃圾页面的被入侵内容审核,可能需要长达数周的时间,因为 Google 把这一类别视为可能需要真正人工审查、而不是自动复检的类别。
在审核已经通过之后再次出现同样的警告,通常说明入口点第一次其实从未被真正堵住,被清除的只是症状。删除可见的垃圾页面感觉像是完成了工作,但如果存在漏洞的插件仍在,或者外泄的密码依然有效,同一个漏洞就会再次被利用,有时就在警告解除后的几天之内。
在这个业务能够承担的预算内,真正能预防这一切的做法
这一切都不需要雇用一支专职的安全团队,而那些跳过基础防护措施的运营者,通常是因为这份清单听起来比实际更长。内容管理系统本身、它的主题,以及每一个已安装的插件,都需要一个固定的更新计划,每周检查一次,而不是"有空再说",而任何安装过一次、现在已不再使用的东西都应该彻底删除,而不是任其闲置,因为一个未启用的插件仍然是一扇从未上锁的门。
考虑到上述 Sucuri 和 Verizon 的数据实际说明的情况,凭证管理的纪律应和打补丁同等重要。这意味着每一个能够触及网站的账户都要有唯一的密码,由密码管理器生成并保存,而不是凭记忆;每一个提供双重身份验证的登录都要开启它;也不要在员工或版主之间传递共用的登录账号,因为共用登录同时也意味着一旦出问题,无法追溯到具体是哪个人的访问权限。
备份和预防同样重要,因为它是让网站在数小时内重新上线、而不必等待可能耗时数周的 Google 审核的办法。一份存放在与它本应保护的网站相同主机账户上的备份算不上什么好备份,因为拥有管理权限的攻击者通常也能触及到它;而一份存放在别处、并且真正通过至少一次恢复测试过、而不是只设定好就放着不管的备份,则是一场糟糕的一周和一场糟糕的一个月之间的区别。
最后一个要素就是尽早发现问题。Search Console 自带的电子邮件提醒,能让安全问题报告送达一个真的有人会去看的收件箱,而不是让运营者在事发数天或数周之后,通过访客的投诉或自然流量的缓慢流失才察觉到问题。以上这些步骤没有一项的代价超过时间本身,而且全都是现在做比等警告页面已经吞掉一周流量、清理工作还在收拾残局时再做要便宜得多。
如果警告已经出现,正确的顺序是:先彻底清理干净,再堵住让它发生的那个具体漏洞,然后才向 Google 请求重新审核,绝不能反过来。如果目前还没出事,正确的顺序是:这周依然在日程表上把同样四件事做掉:给已安装的软件打补丁,更改每一个具有管理权限的密码,在任何提供双重身份验证的地方启用它,并测试一次真实的备份恢复。无论哪种情况,解决办法从来都无关证书登记在哪个司法辖区,也无关聘用的律师事务所规模有多大:它关乎的是谁能登录系统、软件更新到什么程度,以及是否有人能及时察觉。


