V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hr6r
V2EX  ›  程序员

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

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

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

    我的网站是 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  
       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_Mu
        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   ·   我们的愿景   ·   实用小工具   ·   1502 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 17:20 · PVG 01:20 · LAX 10:20 · JFK 13:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.