用 Nginx 反向代理屏蔽 iframe 方式 http 劫持

2015-07-05 09:40:58 +08:00
 tux
原来研究过一个用浏览器userscript脚本跳过iframe劫持的方法,但效果不理想
原来的方法在这https://www.v2ex.com/t/193060

新研究这个通过nginx反代的方法,效果很好
运营商通过http链路劫持的方式直接修改用户的HTTP数据包,达到加载广告的目的
JS注入的方式用ADBLOCK之类的插件很容易就屏蔽掉了
但有一个把用户原始网页放进iframe窗口里的劫持方式特别烦人
iframe方式劫持有一点可以反劫持,原理就是iframe里的窗口都带一个小尾巴,带特定的尾巴就不会被劫持,不然就会无限循环劫持
以淘宝的item.taobao.com/item.htm?xxxxxxxxx为例 我这里的加上小尾巴 noj=true后就不会被劫持, 不同的网址和不同的地区小尾巴不一样,需要根据本地情况修改
下面是nginx配置,我用的是windows版本,以item.taobao.com为例

server {
listen 80;
server_name item.taobao.com;
location / {
rewrite ^/item.htm?(.+) /item.htm?noj=true&$1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://item.taobao.com/;
}
}

#--------按这个格式,有几个网站被劫持就加几个

在本机或者局域网一台机器上配置好后,有2个方法
方法1,用浏览器的代理软件,把item.taobao.com用开了nginx的机器代理就行,HTTP协议,端口就是NGINX的端口,这个方法需要在每台上网的机器上都配置一下,且依赖浏览器的代理软件

方法2,在路由器上把item.taobao.com解析到开了NGINX的机器IP上,且端口只能是80
然后配置改一行 proxy_pass http://目标网址的IP/;
这个方法不需要每台上网电脑都配置,也不用浏览器代理软件,但对路由器有要求,需要路由DNSMASQ之类的功能
7078 次点击
所在节点    NGINX
4 条回复
bdbai
2015-07-05 11:33:19 +08:00
你是怎么发现小尾巴的?
jugelizi
2015-07-05 11:45:09 +08:00
反正我是host拉黑域名,防火墙拉黑IP,este加黑名单,yiqifa什么的跳来跳去全没了
tux
2015-07-05 17:46:36 +08:00
@bdbai 以 chrome为例,打开被劫持的网页,空白处右键,会显示框架什么的 ,而且一般是右下角会有一个广告,,iframe窗口是100%大小的,网页标题一般也是iframe里窗口的标题,普通人一般不会在意.
小尾巴就是iframe窗口里的真实的URL,跟top URL对比一下,区别一般会多xxx=xxx之类的尾巴,我这里劫持了淘宝,天猫,还有优酷,搜狐视频,腾讯视频... 运营商太丧心病狂了
bdbai
2015-07-06 06:30:30 +08:00
@tux 我这里iframe劫持不是必然事件,很难重现,有时候访问v2主页也会被劫持。为江苏电信点赞!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203402

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX