使用CloudflareCDN却不幸遭到域名劫持,跳转到恶意网站,如何解决?

Firgt
82 5

Firgt的博客发布

萌社区转载

事情前因

在26年春节的时候,大家都在休息嘛,我也比较懒。我不知道的是,我的博客还有我firgt.cn下的时候子域名开始遭到劫持,只要用户一访问就会跳转到黄网(看看我发的帖子——娘的,我气死了,站点全都停用了,还跳黄

↑这里要感谢萌友Yuenji的反馈。

事件过程

刚开始还以为,wtf是不是我的网站遭到攻击了,但是转念一想,我不是用了Cloudflare CDN吗,是不是cf又日常抽风?
先查了一下服务器的log,奇怪,压根就没有跳转到某某网站的响应,查了一下,服务器还是安全的。
emm...于是乎,上网一顿猛搜,发现曾经有人伪造过假请求到cf的cdn,造成cdn缓存被注入。比如他伪造一个假请求到你的域名,是提供cdn的缓存,误以为按照用户的请求应当通过域名跳转至某某网站(只要缓存不清除的话,这个现象就会有)
那我就试了一下,清了几次缓存,TTL的拉取时间从原来的20小时变成了1小时
还是没有用
于是我把重心放在了DNS上,去配置了DNSSEC
我就想着,这回终于有用了吧,但是事与愿违,刷新多几次还是会跳转9*窝

一时间束手无措,到底哪里出了问题?
查了log,服务器响应没有夹带私货
在本地运行网站,没有私货
使用cdn的js文件,没有夹带私货
只能是Cloudflare CDN的缓存及请求问题(有人使用假的请求,使CDN缓存夹带私货)
所以暂时使用cf五秒盾I'm Under Attack!解决
本以为开了人机验证就万事大吉了
结果...

啊啊啊😭
娘的,我受不了了!
尝试了开HSTS,关站,停止DNS解析,结果还是跳转到黄网上(难不成哪个byd偷偷把DNS解析到某某黄网了😱)
最后萌友芹香serika反馈,终于让我意识到了问题

运营商 / 路由器在页面里偷偷加一段 JS 跳转
浏览器加载完你的页面后,被本地恶意代码跳走
😂我真是哭笑不得,那没办法,去网上查了一下这种问题的解决方案,通过使用CSP(内容安全策略)防住页面注入跳转
用户就算被注入代码,浏览器也会直接拦截,跳不走

解决方案

我这里以宝塔、Nginx举例修改安全响应头,使用CSP(内容安全策略)

步骤

  1. 登录宝塔面板 → 左侧「网站」→ 找到你的博客网站 → 点击「设置」;
  2. 切换到「配置文件」标签,找到 server { ... } 核心代码块(不要动全局主配置的http块,这里只改单站)。
  3. server 块内任意空白处粘贴以下代码(可以按照注意里的提示自行修改):
add_header Content-Security-Policy "default-src 'self' https://v1.hitokoto.cn https://hitokoto.cn; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: *; frame-src 'self'; child-src 'self'; object-src 'self'; frame-ancestors 'self'; base-uri 'self'; form-action 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), notifications=(), popup=(), fullscreen=(), autoplay=()" always;
  1. 点击「保存」,再「重启 Nginx」,点击「确定」;
  2. 打开 Cloudflare 后台 → 「缓存」→ 「清除全部缓存」(也可以开启开发模式,凑合一下);
  3. 浏览器开无痕模式访问网站,按 Ctrl+F5 强制刷新。

注意

default-src里已加https://v1.hitokoto.cn https://hitokoto.cn白名单(放行一言API,保证正常使用)

如果不想用*放行所有图片,可精准指定图片域名(比如你的图片 CDN 是cdn.firgt.cn):

img-src 'self' data: https://blog.firgt.cn https://cdn.firgt.cn;

我这里是通过Object来内嵌页面,如果只想放行/match/目录的内嵌 HTML:

object-src 'self' /match/;

最后得到


至此大功告成
如果你有建议或要反馈问题,可以联系我
作者:FirgtZhong

在萌社区蹲了一年的程序猿,还没进化。引导页博客页自研外链网盘
最新回复 ( 5 )
  • Firgt @Ta
    2
    1
    转载到L站了
  • 3
    1

    运营商 / 路由器在页面里偷偷加一段 JS 跳转

    HTTPS 不存在了

  • 4
    1
    滚来滚去……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。。
  • 5
    1
    XQZR 运营商 / 路由器在页面里偷偷加一段 JS 跳转 HTTPS 不存在了
    我不太懂,但之前听别人说这确实好像是运营商能做到的
  • Firgt @Ta
    6
    0
    XQZR 运营商 / 路由器在页面里偷偷加一段 JS 跳转 HTTPS 不存在了
    emm,可是即使我开了hsts他仍然存在,这就好比某某网盘上挂油猴脚本一样
  • 游客
    7

    您需要登录后才可以回帖

    登录 注册

发新帖