求助 - 网站被恶意 iFrame, 怎么破? (弹股论斤 - 当股票遇上弹幕) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hr6r
V2EX    程序员

求助 - 网站被恶意 iFrame, 怎么破? (弹股论斤 - 当股票遇上弹幕)

  hr6r
hr6r 2015-07-04 10:53:37 +08:00 8300 次点击
这是一个创建于 3753 天前的主题,其中的信息可能已经有所发展或是发生改变。

我的网站最近访问比较人多, 先感谢大家的支持.

我的网站是 http://tangu.nextbang.com, 被很多人盯上了, 这两天发现这个网站 http://www.izizhucan.com/tangulunjin.html 恶意iframe, 现在不知道怎么破了, 我运维经验不多, 求大家帮助.

1, 昨天在js 里面加上了 if (window !== top) { 判断. OK了.

2, 今天发现他又加强了, 整个下载了我的前端代码, 把上面的判断去掉了. 我去...

麻烦大家帮帮忙, 这种情况怎么破?? 其他的重js webapp 是怎么应付这种问题的?

第 1 条附言    2015-07-04 21:35:54 +08:00
不好意思真的太忙了, 现在才回复大家, 非常感谢大家的帮助.

解决的方法是nginx 上判断 valid_referers.

这两天因为太累, 早上发现这个又很生气, 好好的做技术干嘛这样, 脑子有点空白.
现在想明白了给大家分享一下.

首先我的弹股是一个single page app, 前端比较重.

第一次对方是直接iframe 我的网站. 于是我在js 中加上了 if (window !== top) { 的判断, 当时是有效的.

第二次, 对方将我的所有前端, 包括html 和js 全部下载在本地run, 真是...
所以解决的办法就是在nginx 里面加上 valid_referers 的判断, 如果不是我的域, 直接返回403.
效果就是对方的页面能看到主页(因为他已经将html和js 都下载本地了), 但是无法得到我的数据了.

这件事真的让我很生气, 进而很难过, 为什么这个国家的人们都在想方设法的钻空子.

最后, 我本人在运维上的水平非常有限, 这两天已经恶补了一些, 还是希望大家能够关怀我和爱护我, 多多帮助我, 哈哈, 谢谢大家!
第 2 条附言    2015-07-06 03:48:27 +08:00
referer 误伤了很多其他的源, 怪我没没搞明白. 大伙谨慎使用.
61 条回复    2015-07-06 13:23:32 +08:00
kn007
    1
kn007  
   2015-07-04 11:02:35 +08:00
js判断域名。
deny 对方ip
plqws
    2
plqws  
   2015-07-04 11:02:54 +08:00
数据来源是哪里?后端难道不是你自己的吗?
kn007
    3
kn007  
   2015-07-04 11:03:59 +08:00
如果是直接下载的。那你就要把程序搞复杂点,比如数据请求需要走你服务器,服务器上加判断,非白名单不返回
TakanashiAzusa
    4
TakanashiAzusa  
   2015-07-04 11:04:05 +08:00 via Android
同楼上。js判断域名。记得代码混淆
TakanashiAzusa
    5
TakanashiAzusa  
   2015-07-04 11:06:17 +08:00 via Android
@kn007 有自己后台的话,一个跨域就可以搞死对面了吧。。
kn007
    6
kn007  
   2015-07-04 11:11:22 +08:00
@TakanashiAzusa 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,这招太狠。。。
hr6r
    7
hr6r  
OP
   2015-07-04 11:17:27 +08:00
@kn007 nginx 的$host 都不行? 我有点弄不明白... 要在我的服务器端代码判断才行?
@TakanashiAzusa 跨域是指add_header X-Frame-Options SAMEORIGIN; 设置吗? 设置的但是无效, 非常奇怪, 不明白...
loading
    8
loading  
   2015-07-04 11:19:19 +08:00 via Android
html 不都是你的吗?
写段js,不是自己域名就弹窗,放广告,想做什么坏事都行。

记得,自己在后台写开关,想起来就启动几分钟…
RIcter
    9
RIcter  
   2015-07-04 11:20:36 +08:00 via iPhone   2
<script>document.write('Hacked by hr6r');</script>
hr6r
    10
hr6r  
OP
   2015-07-04 11:23:17 +08:00
就是要改我后台的js 咯....
就是不想再加重后台的负担了..
virusdefender
    11
virusdefender  
   2015-07-04 11:25:44 +08:00
X-Frame-Options
TakanashiAzusa
    12
TakanashiAzusa  
   2015-07-04 11:27:15 +08:00 via Android
@hr6r nginx设置允许跨域的域名就好了,这样其他的就请求不到数据了。设置了无效的话有可能是你语法问题。。
mortal
    13
mortal  
   2015-07-04 11:27:31 +08:00
LZ 的这个网站已经在微博上被人转发许多次了 : ) 说明大家喜欢,人一多自然就有攻击,LZ 加油哇。
kn007
    14
kn007  
   2015-07-04 11:29:01 +08:00   1
@hr6r nginx是valid_referers。
但是最好还是js判断域名。
跨域是指XSS。
hahasong
    15
hahasong  
   2015-07-04 11:31:36 +08:00   1
服务端响应头 ,这一项 Access-Control-Allow-Origin:* 去掉,或者写死你的域名 'nextbang.com'。
js 端强制声明一下 document.domain = 'nextbang.com' 并做代码压缩。
不过iframe嵌套这样做然并卵。还是检测下如果父窗口存在,就不停alert吧
TakanashiAzusa
    16
TakanashiAzusa  
   2015-07-04 11:34:17 +08:00 via Android   1
@kn007 js还是可以被绕过去的。。毕竟是前端的东西,任人打扮。。
我这里指的是nginx配置里的Access-Control-Allow-Origin ,因为数据是通过ajax提交的,浏览器默认会检查服务器的crossdomain.xml,不在里面的话数据会发送失败的
MrEggNoodle
    17
MrEggNoodle  
   2015-07-04 11:35:09 +08:00
后台加上请求域名判断?
typcn
    18
typcn  
   2015-07-04 11:36:05 +08:00
if(window.location.origin != "http://tangu.nextbang.com"){ window.location = "http://tangu.nextbang.com" }

混淆一下

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('h 3=["\\6\\g\\8\\7\\8\\4","\\i\\6\\d\\9\\5\\8\\6\\4","\\j\\5\\5\\e\\f\\a\\a\\5\\9\\4\\7\\m\\c\\4\\k\\o\\5\\n\\9\\4\\7\\c\\d\\6\\p"];l(b[3[1]][3[0]]!=3[2]){b[3[1]]=3[2]};',26,26,'|||_0x49e0|x6E|x74|x6F|x67|x69|x61|x2F|window|x2E|x63|x70|x3A|x72|var|x6C|x68|x65|if|x75|x62|x78|x6D'.split('|'),0,{}))


楼主你可以放到 jquery.js socket-io.js 之类的文件里面
typcn
    19
typcn  
   2015-07-04 11:37:08 +08:00
Socket.io 里面的 Access-Control-Allow-Origin:* 改成 Access-Control-Allow-Origin:http://tangu.nextbang.com
kn007
    20
kn007  
   2015-07-04 11:37:51 +08:00
@TakanashiAzusa 嗯。我晓得。其实楼主比较需要的是把详细方案告诉他,他直接做就行了。23333
imlonghao
    21
imlonghao  
   2015-07-04 11:46:30 +08:00
HTTP头加上,x-frame-options:DENY
您可以测试一下我的博客, https://imlonghao.com/
就是不能用iframe套进去的。
hr6r
    22
hr6r  
OP
   2015-07-04 11:47:20 +08:00
搞定了, 请大家围观 -> http://www.izizhucan.com/tangulunjin.html
他把我的html和 js 都下载本地run 了, 真奇葩.

看看他还能搞出啥来.

把技术用在这.. 真是.... 唉...
MountainRain
    23
MountainRain  
   2015-07-04 11:51:20 +08:00
用JS判断
如果是自己的网页过来的应该咋地就是咋地
如果是别人iFrame的,alert提示,再跳转到你自己的页面啥。。或者显示点什么啥子的
ccbikai
    24
ccbikai  
PRO
   2015-07-04 11:53:33 +08:00
kn007
    25
kn007  
   2015-07-04 11:55:03 +08:00
@hr6r 恭喜!
你可以在本帖补充你的解决办法,留给后人搜索之,用得上。
imlonghao
    26
imlonghao  
   2015-07-04 11:57:01 +08:00
他现在已经弹不了了~
lk09364
    27
lk09364  
   2015-07-04 11:57:05 +08:00
@TakanashiAzusa 请教一下,crossdomain.xml 不是 Flash 的吗?
TakanashiAzusa
    28
TakanashiAzusa  
   2015-07-04 12:04:20 +08:00 via Android   1
@lk09364 那可能是我记错了。我只记得静态资源也会触发这个。待会儿我开电脑了的时候再研究下
Comdex
    29
Comdex  
   2015-07-04 12:24:19 +08:00
楼主你的网站的弹幕的评论只是在发表后出现一瞬间的么?不保存在数据库?
CRVV
    30
CRVV  
   2015-07-04 12:39:04 +08:00
上证指数3686.92元?
mrjoel
    31
mrjoel  
   2015-07-04 12:48:16 +08:00
增加一个方法。。。直接禁了他服务器ip

看他有多少ip可换
mrjoel
    32
mrjoel  
   2015-07-04 12:48:39 +08:00
额。。。iframe 。。。说错了
bdbai
    33
bdbai  
   2015-07-04 15:09:22 +08:00
@typcn packed混淆的js太容易解密了,去掉eval往控制台一丢就行,最多有些带\x的字符串。
Air_M
    34
Air_Mu  
   2015-07-04 15:38:24 +08:00
建议人肉 全网扩散公布这婊子的信息
pythoner
    35
pythoner  
   2015-07-04 16:37:15 +08:00
刚刚还在网易上看到楼主的新闻,加油
Acirno
    36
Acirno  
   2015-07-04 17:16:41 +08:00
额 载入不了 咋回事
ddou
    37
ddou  
   2015-07-04 17:34:23 +08:00
@virusdefender X-Frame-Options的确是解决iframe的正确方法。但直接下载整个前端的话,就只能另想奇招了。
SuujonH
    38
SuujonH  
   2015-07-04 19:06:17 +08:00
403
TakanashiAzusa
    39
TakanashiAzusa  
   2015-07-04 19:08:55 +08:00
@lk09364 刚刚试了下,ajax请求跨域的话,确实不需要crossdomain.xml,不过我发现不管是不是跨域,服务器都会返回一个200,我猜可能跨域的话服务器端的解析程序就直接断开连接了,然后浏览器提示跨域(不懂nginx,这个单纯猜测)
lk09364
    40
lk09364  
   2015-07-04 19:16:09 +08:00
@TakanashiAzusa 我估计是伺服器收到 AJAX 请求后回复时加上 Access-Control-Allow-Origin Header,交给浏览器判断当前页面是不是在 Access-Control-Allow-Origin 里。
Qapla
    41
Qapla  
   2015-07-04 19:24:38 +08:00
403
TakanashiAzusa
    42
TakanashiAzusa  
   2015-07-04 19:42:45 +08:00   1
@lk09364 我又试了下,你说的是对的。默认不返回 Access-Control-Allow-Origin Header的话就是不允许跨域,但是可以跨域的域名服务器文件头会返回一个 Access-Control-Allow-Origin Header,然后浏览器做判断。
wheatcuican
    43
wheatcuican  
   2015-07-04 21:42:48 +08:00
一直载入中。。。
sciooga
    44
sciooga  
   2015-07-04 22:41:08 +08:00

那个网站挂出了楼主的链接,然后因为 referer 的问题...直接点击跳转就403了,楼主是不是考虑吸收掉他偷来的用户...
Perry
    45
Perry  
   2015-07-04 23:04:18 +08:00
@sciooga 那个时楼主自己之前挂的,然后模仿者抄的时候顺便抄进去了,不过这个建议倒是真的可以
chairuosen
    46
chairuosen  
   2015-07-04 23:07:29 +08:00
我从V2点过去都是403的,应该数据接口加referer判断 首页html不加
sciooga
    47
sciooga  
   2015-07-04 23:17:31 +08:00
@Perry 域名不对接口返回的弹幕全部是广告或者源站链接更漂亮...
des
    48
des  
   2015-07-04 23:39:18 +08:00
估计对方下一步就是进行代理了……
Perry
    49
Perry  
   2015-07-05 00:01:31 +08:00 via iPhone
有个问题 到底是 danmu 还是 tanmu。。
shiniv
    50
shiniv  
   2015-07-05 01:22:16 +08:00
@Perry danmu
momou
    51
momou  
   2015-07-05 01:43:49 +08:00 via Android
楼主上知乎日报了…
limtao
    52
limtao  
   2015-07-05 01:44:30 +08:00
刚来这没几天 居然发现你了!而且首页发现你的po居然还被顶上了...哈哈哈哈
等过段时间大家不忙的时候出来聊聊。
上个月在IBM刚刚做完一个银行的渗透性项目,你提到的iframe攻击在术语上叫做clickjacking,
解决方案google一下特别多。我当时用的 X-Frame-Options设置成deny或者same-origin。
你这个案例我发现个人开发者的时代要来临了。加油!
我这有不少ios的项目可能要转包,到时候聊聊。哈哈哈哈哈哈哈
yylzcom
    53
yylzcom  
   2015-07-05 08:16:35 +08:00
“网站持续被空军攻击, 请大家收藏备用网址:
http://tangu2.nextbang.com

不要脸的还真多,楼主,人家说你是做空力量,把你网址说成备用网址
你直接在页面上发一声明打他脸吧,我都看不下去了
另外又深刻地认识到“空军论”“阴谋论”受众的智商
nikubenki
    54
nikubenki  
   2015-07-05 11:02:05 +08:00 via iPhone
玩儿蛋,目测以后弹幕网站会有越来越多人管这叫“檀木”了。
imlz
    55
imlz  
   2015-07-05 15:27:42 +08:00
楼主,我这里建了一个玩玩,只作学习交流,我做攻(表想歪),你想想防,私下讨论可以根据我域名各种找到我联系方式
http://stock.ilz.me/
只作学习交流
imlz
    56
imlz  
   2015-07-05 15:30:19 +08:00
静态文件完全可以本地,我就借用一下你的站点,主要是数据飘的保护。测试请阅读完alert框后点“取消”
simodorg
    57
simodorg  
   2015-07-05 16:54:40 +08:00
@imlz 部分乱码了,编码好像有些错误。
imlz
    58
imlz  
   2015-07-05 17:30:40 +08:00
@simodorg 应该是未强制设置utf8,麻烦测试时手动改一下把
hr6r
    59
hr6r  
OP
   2015-07-06 03:46:44 +08:00
@imlz 求老司机带路, 我已筋疲力尽.
jugelizi
    60
jugelizi  
   2015-07-06 13:11:18 +08:00
post才限制下来源吧
laiyingdong
    61
laiyingdong  
   2015-07-06 13:23:32 +08:00
我看了一下 这个网站的本站什么自助餐 其实完全是一个靠采集 垃圾广告 加盟广告 的垃圾网站 估计主要是靠站群广告盈利 你这个页面我也不知道怎么说了
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1029 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 31ms UTC 23:07 PVG 07:07 LAX 16:07 JFK 19:07
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86