最近我的Halo博客遭遇了一场“广告劫持”——页面被恶意嵌入了iframe标签和陌生script,控制台不断报错,用户体验直线下降。经过一番排查,我找到了问题的根源和解决方案,记录下这次实战经历。

🕵️ 问题现象

  • 网页被注入未知iframe和script标签

  • 网络请求中出现大量陌生JS文件

  • 控制台持续报JS执行错误

  • 仅在使用某些WiFi时出现,切换4G网络正常

🎯 根本分析
问题出在路由器DNS劫持!某些公共或不太安全的路由器会被恶意修改DNS设置,在HTTP流量中强行插入广告代码。而启用HTTPS的网站因其加密特性,能够有效防止这种中间人攻击。

🛡️ 解决方案(亲测有效)
1️⃣ SSL证书加密(首选方案)
为博客配置HTTPS是根本解决方法。我使用Let‘s Encrypt免费证书,通过FRP内网穿透实现自动HTTP到HTTPS跳转:

# FRPC客户端配置
[web]
type = https
custom_domains = yourdomain.com
plugin = https2http
plugin_crt_path = /path/to/cert.pem
plugin_key_path = /path/to/private.key
force_https = true

配置中插入force_https = true把所有HTTP请求自动重定向到HTTPS,广告注入问题彻底解决。

2️⃣ Meta标签防护
在HTML头部添加:

<meta http-equiv="X-Frame-Options" content="DENY">

阻止页面被嵌入iframe,但只能防护部分攻击。

3️⃣ JavaScript防护

<script type="text/javascript"> 
    if(top.location!=self.location)top.location=self.location;      
</script>

检测页面是否被嵌套,自动跳出框架。

4️⃣ CSS屏蔽方案

<style type="text/css"> 
    iframe{ v:expression(this.src='about:blank',this.outerHTML='');} 
</style>

通过CSS将iframe显示为空白,作为临时应急措施。

💡 实践建议

  • 优先实施HTTPS:其他方法都只是权宜之计

  • 路由器安全:定期检查路由器DNS设置,避免使用默认密码

  • 网络选择:公共WiFi风险较高,重要操作建议使用移动网络

自从升级到HTTPS后,博客再未出现任何广告注入问题。网络安全无小事,希望我的经验能帮助遇到类似问题的博主们!