惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
MyScale Blog
MyScale Blog
Recent Announcements
Recent Announcements
N
Netflix TechBlog - Medium
GbyAI
GbyAI
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Martin Fowler
Martin Fowler
腾讯CDC
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
WordPress大学
WordPress大学
P
Proofpoint News Feed
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog

流动

山西之旅 | 流动 博客焕新,记录继续 | 流动 友链 | 流动 博客加速实践 广府古城一日游 我做了一个口播短视频二创工具:VideoRemaker Windows 下 Codex Cli 更新报 Move-Item is denied 错误的解决 Caddy 转发 GOST 报 TLS internal error 问题的排查与解决 对口型视频合成方案对比:Wav2Lip、VideoReTalking 与 MuseTalk 2026 音色克隆方案对比:IndexTTS-2、CosyVoice、GPT-SoVITS、Fish Speech、VoxCPM 部署与实测 AI Agent折腾记(OpenClaw / Hermes Agent) 我的2025年 大连之行 回家收麦 六一儿童节爬长城 Golang database/sql 数据库断线自动重连机制解析 Golang默认Http Client导致的cannot assign requested address错误 清明踏春,爬山看海 购入小牛G400T电动车 北京的三月飞雪 wrenAI本地LLM模型部署 天津一日游 2024年终总结 停止使用staticfile.org服务 使用 ImageMagick 自动添加水印,保护图片版权 如何注册一个.sol域名 奥森公园半日游 昌平42公里骑行绿道打卡 十月一日爬慕田峪长城 当Hugo遇上AVIF,优化图片加载
博客被恶意镜像
Liudon · 2024-09-26 · via 流动

起因

9月初的时候,在Google Search Console里发现了一个外链,域名是**.top

随手点过去看了下,发现居然跟我的博客内容一模一样,就是内容变成了繁体。

知道这肯定是被拿来镜像了,不过当时也没在意,就没管。

后来在v2ex上也发现类似的问题,还有其他博主也反馈有被镜像,感觉像是个黑产批量的操作。

这周Google Search Console反馈我的站点有个新问题,点进去一看,嚯。

搜索问题

在谷歌里搜了一下,发现已经有很多这个站点的收录了。

开始影响到我的博客收录了,这怎么能忍呢,必须处理掉它。

分析

测试了一下这个站点,不得不说,这个人是相当的聪明。

国内访问404

海外访问200

使用了Cloudflare服务,隐藏了真实的服务ip。

同时判断了访问ip,如果是国内用户直接返回了404,海外才会正常返回,这样一般国内用户就发现不了。

还重写了robots.txt,只让谷歌收录。

查了一下域名Whois信息,注册在阿里云。

whois

页面上挂的备案号都是我的,搞事情的话后面再扯上我,这就麻烦了。

这就像块牛皮癣,越想越恶心。

我的博客搞了两套部署,一套部署在Cloudflare Pages,一套部署在IPFS

接下来就是搞清楚,他是镜像的哪个站点:

1. IPFS站点

看他的robots.txt内容,我一开始怀疑是镜像的IPFS站点liudon.xyz,感觉像是在我的robots.txt前面加了一段内容。

curl 'https://liudon.xyz/robots.txt'
User-agent: *
Disallow: /

幸好还有一个Robots meta 标记,于是把IPFS部署的站点加上了这个属性。

部署后发现这个镜像站并没有更新,排除了这个可能。

2. Github 静态仓库

我在Github上单独搞了个分支存放生成的静态文件,Cloudflare Pages直接读取这个分支进行部署。

怀疑他是不是监控了这个仓库的提交记录,直接拿这个来部署的镜像站。

我把Cloudflare Pages的自动部署关掉,然后直接修改静态文件。

更新后发现,这个静态站并没有预期的更新。

3. Cloudflare Worker

在分析过程中,发现我的博客更新后,他的站点也会很快就更新。

因为他的网站部署在Cloudflare上,考虑是走的Cloudflare Worker反代,直接请求目标站点,然后进行繁体翻译返回。

这样就完全不需要关心更新的问题,完全自动化处理,太完美了。

反制

其实这里并没有太好的办法反制,robots文件被他重写了,无法控制,使用Robots meta 标记的话会影响到我们自己的收录。

只能是通过加一段JS代码,参考自竹林里有冰,判断访问的域名非法的话,直接跳转到正确地址。

const host = window.location.host
if (host !== 'liudon.com' && ! host.startsWith('localhost') && ! host.startsWith('127.0.0.1')) {
    document.body.innerHTML = [
        '<div style="margin: auto;">',
        '<h1>当前页面并非本文作者的主页,将在五秒后跳转。</h1>',
        '</div>',
    ].join('')
    document.body.style = [
        'background-color: white;',
        'color: black;',
        'text-align: center;',
        'font-size: 50px;',
        'width: 100vw;',
        'height: 100vh;',
        'display: flex;',
    ].join('')
    setTimeout(() => {
        window.location.href = 'https://liudon.com'
    }, 5000)
}

查了一下,搜索Bot爬取的时候会执行js,希望能更新掉已收录的网页信息。