V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
MonoLogueChi
V2EX  ›  JavaScript

关于网站强奸剪切板那点事

  •  7
     
  •   MonoLogueChi · 2018-01-27 18:02:11 +08:00 · 27135 次点击
    这是一个创建于 2494 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近手机剪切板经常被强奸,我好像也看到过,有人提问剪切板到底是怎么被强奸的,就简单的写了一篇文章讲述某些网站是怎么强奸你的剪切板的,文章地址是https://www.xxwhite.com/2018/Clipboard.html

    我把文章在这里复制了一遍,但是排版什么的可能不太理想,或者想体验一下剪切板是怎么被强奸的,可以去我的博客里看一下,进去之后只要随便点击一下就会被强奸。

    最近因为种种原因,经常有网页强奸手机剪切板,今天我们就来探究一下,这些网页究竟是怎么强奸你的剪切板的。

    起因

    事情的起因其实很奇怪,我昨天晚上去查资料的时候,无意中发现我的剪切板被强奸的,所以就仔细研究了一下这个东西。

    本来我对 JS 也是一窍不通,这是我第二次写 JS 脚本,上一次是写那个跳转页面。如果本文有什么错误,欢迎大佬指正。

    先说一下我访问的网页,菜鸟教程手机版https://m.runoob.com/

    发现剪切板被强奸之后,我就去下载了一个剪切板监控插件https://www.coolapk.com/apk/com.chili.ClipboardManager

    然后找到了一点线索

    这里说明一下,显示的操作应用时系统 web 内核,其实时 via 调用了系统 web 内核,而这个复制操作又是在 via 浏览器中执行的,所以会提示 web 内核访问了剪切板。

    原理解析

    好了,元凶找到了,我们就要看看他是怎么作案的,手机浏览器调试不太方便,我就等到第二天到电脑上来看看。

    首先打开网页,然后打开调试工具,然后重新刷新一下网页看看。

    看看我找到了什么,果然是通过 JS 实现的

    这个 clipboard.min.js 就是用于实现复制文本到剪切板的,而且兼容性非常好。

    好了,既然知道是怎么作案的,那就再往深了查一点,咱们看看 index.html 里都写了什么。

    先把网页复制出来,然后搜索clipboard,找到相关的线索。

    简单解释一下,他先通过https://m.runoob.com/api/codexx.php这个接口获取数据,你们有兴趣的可以自己去看一下,这个时候我得到的是

    {"flag":true,"ins_data":"\uffe5Sh7p0Osu3GO\uffe5"}
    

    然后接着往下看,接下来就是改变 body 的 id 和 data-clipboard-text,这两步都是给接下来强奸你的剪切板做准备,然后就是强奸你剪切板的方法咯,再后面就是验证有没有强奸成功。

    除此之外,还要判断你是不是移动设备,因为强奸你电脑的剪切板时完全没用的。

    验证一下

    看到别人剧本写的挺好的,难免想要验证一下,所以自己改了一个剧本

    结果:

    好了我已经可以成功强奸剪切板了。

    附代码

    真的写的很丑,基本都是复制粘贴的,不要太在意细节啊

    <!doctype html>
    <html lang="">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>测试页面</title>
    </head>
    <body>
    <div id="copy" data-clipboard-text="测试剪切板">
        <p>准备强奸
            <br><br><br><br><br><br><br><br><br><br>
            结束</p>
    </div>
    
    <script src="https://cdnjs.cat.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cat.net/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
    <script>
         $("body").onclick = copycode();
    
        function copycode()
        {
            if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
            {
                var clipboard = new Clipboard('#copy');
    
                clipboard.on('success', function (e)
                {
                    alert("复制成功");
                });
                clipboard.on('error', function (e)
                {
                    alert("复制失败");
                });
            }
        }
    
    </script>
    </body>
    </html>
    

    写在后面的

    我很负责任的告诉你,当你看到这里时,你的手机剪切板八成已经被我强奸了。如果你对这篇文章感兴趣的话,可以支持我一下哟,点击下方赞赏,请我吃包辣条啥的都行。

    附本文所用代码

    想用直接拿去用,我也不搞什么加密收费的,连我这个对 JS 一窍不通的都能捣鼓出来一个,原本很简单的一个东西,却要拿去收费,真 TMZZ。

    <script src="https://cdnjs.cat.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cat.net/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
    <script>
        $("body").onclick = copycode();
        $("body").attr("id" ,"copy");
        $("body").attr("data-clipboard-text" ,"强奸你的剪切板 lieetD58G4");
        function copycode()
        {
            //if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
            {
                var clipboard = new Clipboard('#copy');
                clipboard.on('success', function (e)
                {
                    //alert("复制成功");
                });
                clipboard.on('error', function (e)
                {
                    //alert("复制失败");
                });
            }
        }
    </script>
    
    70 条回复    2018-01-29 13:03:08 +08:00
    Showfom
        1
    Showfom  
       2018-01-27 18:04:15 +08:00 via iPhone   ❤️ 4
    岂不是放入支付宝红包口令卡然后就等着别人领红包去了
    MonoLogueChi
        2
    MonoLogueChi  
    OP
       2018-01-27 18:05:31 +08:00
    sobigfish
        3
    sobigfish  
       2018-01-27 18:10:30 +08:00
    @Showfom #1 最近很多网站 小程序 都这么干( app 估计也有 只是不好抓现行)
    youyaang
        4
    youyaang  
       2018-01-27 18:48:32 +08:00
    @Showfom 已经有很多这样干了,是真的烦
    littlebutt
        5
    littlebutt  
       2018-01-27 18:50:18 +08:00 via iPhone
    我更想知道 clipboard.min.js 里面是怎么实现的。。
    q33q33
        6
    q33q33  
       2018-01-27 18:57:36 +08:00 via Android
    所以手机端怎么防止 js 强奸呢?
    sobigfish
        7
    sobigfish  
       2018-01-27 18:59:51 +08:00
    @q33q33 #6 我准备去找个 adblock 的浏览器提个 feature request
    xiaopc
        8
    xiaopc  
       2018-01-27 19:01:38 +08:00 via Android
    coolcoffee
        9
    coolcoffee  
       2018-01-27 19:03:00 +08:00   ❤️ 1
    @littlebutt 利用这个 document.execcommand('copy')实现的

    @q33q33 个人用户根本没那精力去折腾。 如果要避免的话, 就像楼主的文章中提到了一个获取支付宝内容的接口,把那个域名写入 hosts 就能避免。
    MonoLogueChi
        10
    MonoLogueChi  
    OP
       2018-01-27 19:16:41 +08:00 via Android
    @sobigfish 安卓手机可以安装我提到的那个 xposed 插件看一下,但是能不能抓到真正的元凶,真不一定
    @littlebutt 看#8 发的 github 地址
    @q33q33 @coolcoffee 个人感觉屏蔽接口不如屏蔽 clipboard.min.js ,但是这么做有的时候网页上那种点击复制的按钮可能会失效
    @littlebutt @coolcoffee 具体调用的哪个方法我也不太清楚,貌似不同的浏览器会有不同,毕竟 document.execCommand('copy')兼容性不如 clipboard
    yksoft1
        11
    yksoft1  
       2018-01-27 19:35:51 +08:00   ❤️ 1
    为啥强奸 PC 的剪贴板没用?玩黑客的挂个脚本强制复制和提交 PC 剪贴板内容可以起重大作用
    MonoLogueChi
        12
    MonoLogueChi  
    OP
       2018-01-27 19:47:10 +08:00 via Android
    @yksoft1 就事论事,别太认真啊。我是说我提到的这个用处,强奸电脑剪切板没啥用
    ke1vin
        13
    ke1vin  
       2018-01-27 20:22:32 +08:00
    这样做的意义是什么?领支付宝红包?
    jason19659
        14
    jason19659  
       2018-01-27 20:35:19 +08:00
    必须得点一下才能复制
    yangyaofei
        15
    yangyaofei  
       2018-01-27 20:43:31 +08:00 via Android
    这个半年前上 1024 站的时候也有时候出现过,因为我这个系统,复制东西有提示。话说,随意获取剪贴板浏览器不管么,这么隐私的东西……
    YLGG
        16
    YLGG  
       2018-01-27 21:11:20 +08:00 via iPhone
    表示 iPhone 好早就中招了!!防不胜防!!!
    geekzu
        17
    geekzu  
       2018-01-27 21:13:24 +08:00 via Android
    我这边移动宽带直接在网页里插 js 跳转支付宝红包链接,浏览器链接默认打开支付宝的话就直接领取了…
    MonoLogueChi
        18
    MonoLogueChi  
    OP
       2018-01-27 21:27:10 +08:00 via Android
    @geekzu 可能是 dns 劫持吧,以前经常遇到插广告的。这个貌似可以举报,取消参加活动资格
    @jason19659 因为触发事件是点击,触发事件可以改成其他的动作
    liangzi
        19
    liangzi  
       2018-01-27 21:33:53 +08:00 via Android
    楼主博客主题不错我正好在找~ so
    dic
        20
    dic  
       2018-01-27 21:37:49 +08:00 via Android
    已经把各软件的剪切板权限关了
    MonoLogueChi
        21
    MonoLogueChi  
    OP
       2018-01-27 21:44:46 +08:00 via Android
    @YLGG 这个很早之前就有了,只是昨天晚上突然想捉贼,就折腾了一下

    @yangyaofei 浏览器也没办法管啊,毕竟操作剪切板大部分都是正用,除非把浏览器操作剪切板权限直接给禁了,但是这样又会造成更大的麻烦,看看其他人有没有好的想法吧

    @geekzu 老哥,把应用操作剪切板权限都给禁了,剪切板不就成摆设了吗,没有剪切板的话,很多地方都会不太方便吧
    jason19659
        22
    jason19659  
       2018-01-27 22:15:50 +08:00
    @MonoLogueChi #18 你这种方式做出来最好也就这样了,https://t2t2.cc/test.html
    MonoLogueChi
        23
    MonoLogueChi  
    OP
       2018-01-27 22:18:04 +08:00 via Android
    @ke1vin 现在用的比较多的也就是吱口令和淘口令了
    iwtbauh
        24
    iwtbauh  
       2018-01-27 22:22:07 +08:00 via Android   ❤️ 1
    对于 Android 用户其实很简单,只需要用 appops 禁用阿里系 app 读取剪贴板的权限
    Fatenana
        25
    Fatenana  
       2018-01-27 22:23:15 +08:00
    这菜鸟教程还以为是个不错的入门网站,从书签里删了
    MonoLogueChi
        26
    MonoLogueChi  
    OP
       2018-01-27 22:36:58 +08:00 via Android
    @jason19659 并没有正确唤起应用,应该不是浏览器的锅,我也没有设置拦截唤醒
    https://s1.ax2x.com/2018/01/27/4EmCJ.png

    @Fatenana 菜鸟教程其实还是不错的网站,很适合新手学习和参考,这个应该是淘口令,只是没向用户说明就直接搞这个东西,难免会有一点反感,如果可以加以说明,相信大部分用户还是可以理解的
    DOLLOR
        27
    DOLLOR  
       2018-01-27 23:04:01 +08:00   ❤️ 2
    应该向浏览器厂商提一个 issue,访问剪贴板前要向用户征得同意。
    就像现在的通知( Notification API )和位置( Geolocation API )一样,会弹出提示,用户同意才能使用。
    MonoLogueChi
        28
    MonoLogueChi  
    OP
       2018-01-27 23:25:29 +08:00 via Android
    @DOLLOR 大厂的浏览器左右不了发展,不过个人维护的浏览器应该是可以的试一下的,改天去提个 issue 问下作者能不能实现这个功能
    opengps
        29
    opengps  
       2018-01-28 00:19:12 +08:00 via Android
    怪不得我经常粘贴东西发现是个红包口令
    pandacat
        30
    pandacat  
       2018-01-28 00:25:50 +08:00
    自如安卓 APP 也会这样。。看房后复制一堆莫名的字符串
    Flobit
        31
    Flobit  
       2018-01-28 02:42:24 +08:00 via Android
    大半夜的看这标题我就进来了。。
    lovewilliam
        32
    lovewilliam  
       2018-01-28 07:02:50 +08:00
    iOS 支付宝 app 一摁开就显示正在从 mac 剪贴板粘贴。。。有人遇到过吗
    lslqtz
        33
    lslqtz  
       2018-01-28 07:49:44 +08:00
    反正。。
    无所谓了,我也不领红包
    coolcoffee
        34
    coolcoffee  
       2018-01-28 07:52:42 +08:00
    iOS 的 Safari 剪切板已经很严格了, 必须要在用户事件里面才会生效,也就是必须用户点击了页面,不可能打开页面自动复制。

    但是 Apple 没想到我国国情在此, 半数以上的网页都没有 https
    insoxin
        35
    insoxin  
       2018-01-28 08:03:17 +08:00 via Android
    刚刚访问了菜鸟教程,然后查看剪贴板没新🌚难道我姿势不对?
    insoxin
        36
    insoxin  
       2018-01-28 08:05:18 +08:00 via Android
    补充我 UC 浏览器
    MonoLogueChi
        37
    MonoLogueChi  
    OP
       2018-01-28 08:27:46 +08:00 via Android
    @insoxin 我刚才也试了一下,发现没有访问剪切板,看了一下接口 m.runoob.com/api/codexx.php 显示{"flag":false,"ins_data":""},原因懂了,flag=false,再去看正文,介绍工作原理那里 if(data.flag),懂了
    liwl
        38
    liwl  
       2018-01-28 08:59:11 +08:00
    还有一个进阶版本,https://www.1iwl.com/zfb/
    insoxin
        39
    insoxin  
       2018-01-28 09:02:08 +08:00 via Android
    @MonoLogueChi 访问您博客地址剪贴板也没,试了 UC 和 chrome,是不是免疫了😂
    hugee
        40
    hugee  
       2018-01-28 09:06:43 +08:00 via Android
    这些人是非常的无耻!感谢楼主曝光
    MonoLogueChi
        41
    MonoLogueChi  
    OP
       2018-01-28 09:08:10 +08:00 via Android
    @liwl 应该是和#22 那个原理差不多吧,很强,但是唤醒会有提示,还没有发现哪个网站做的这么绝
    @insoxin 访问进入之后随便点击页面任意位置试一下,触发事件是点击
    insoxin
        42
    insoxin  
       2018-01-28 09:09:57 +08:00 via Android
    insoxin
        43
    insoxin  
       2018-01-28 09:10:37 +08:00 via Android
    @MonoLogueChi 点了😂还翻了博主建站史
    newhua
        44
    newhua  
       2018-01-28 09:16:46 +08:00 via Android
    确实很容易实现
    audoe
        45
    audoe  
       2018-01-28 10:10:24 +08:00
    @pandacat 那是推广标识
    liwl
        46
    liwl  
       2018-01-28 11:02:19 +08:00
    @insoxin 用浏览器打开,同意打开
    liwl
        47
    liwl  
       2018-01-28 11:03:08 +08:00
    @MonoLogueChi 嗯,主要是浏览器的安全做的,跳转会有提示,不过,放在门户站之类的还是可以用的
    fml
        48
    fml  
       2018-01-28 11:29:21 +08:00
    测试回复
    MonoLogueChi
        49
    MonoLogueChi  
    OP
       2018-01-28 12:14:05 +08:00 via Android
    @insoxin 都是黑历史
    @liwl 在 UV 大站做个淘口令批量发放还差不多,吱口令就算了
    MOONYANYI
        50
    MOONYANYI  
       2018-01-28 12:52:15 +08:00
    关闭的话很简单,只要停用相关网站的 JS 或 FlASH 就可以.如果不知道是哪个网站就去浏览器设置里重置就 OK 了
    torbrowserbridge
        51
    torbrowserbridge  
       2018-01-28 13:16:35 +08:00 via Android
    我发现 csdn 都学会干这种龌龊事了
    bilberry
        52
    bilberry  
       2018-01-28 15:45:28 +08:00
    难怪说我最近进入支付宝,都提示我领红包,get 一招
    icedx
        53
    icedx  
       2018-01-28 15:56:05 +08:00
    学到了
    MonoLogueChi
        54
    MonoLogueChi  
    OP
       2018-01-28 17:06:55 +08:00 via Android
    @Showfom 吱口令是小事,发淘口令才是正事
    8qwe24657913
        55
    8qwe24657913  
       2018-01-28 17:08:18 +08:00
    @yksoft1 #11 只能写入,不能读剪贴板内容
    iTakeo
        56
    iTakeo  
       2018-01-28 17:09:25 +08:00 via iPhone
    移动端本身就有提供复制的 api,而且兼容性也不错,没必要额外用插件
    M003
        57
    M003  
       2018-01-28 17:11:17 +08:00
    https://pan.baidu.com/s/1dG1Mcm9

    看我的视频,刚让一个小众的 APP 强奸了,很爽,痛并快乐着.
    MonoLogueChi
        58
    MonoLogueChi  
    OP
       2018-01-28 17:17:25 +08:00 via Android
    @iTakeo 这个我真不清楚,反正我又不是写前端的,js 语法我都搞不懂,就是看着 api 硬着头皮写下去的
    Telegram
        59
    Telegram  
       2018-01-28 18:10:32 +08:00 via iPhone
    这一波还不是支付宝那个狗屁活动搞出来的,烦死了都。
    sobigfish
        60
    sobigfish  
       2018-01-28 18:44:57 +08:00
    @Telegram #59 估计想出这个产品 /销售 要疯,几乎全是黑产党
    MonoLogueChi
        61
    MonoLogueChi  
    OP
       2018-01-28 20:00:08 +08:00 via Android
    @Telegram @sobigfish 吱口令是小事,主要是淘口令,那个来钱比吱口令快
    insoxin
        62
    insoxin  
       2018-01-28 21:10:52 +08:00 via Android
    @liwl 42 楼有视频。。。
    Free_Thinking
        63
    Free_Thinking  
       2018-01-28 23:17:05 +08:00
    代码已删除,我反思……
    Free_Thinking
        64
    Free_Thinking  
       2018-01-28 23:20:07 +08:00
    本意是看朋友在测试,想尝试,false 也是判断开始与关闭的。测试两天后我关闭了。目前代码已全部删除。
    M003
        65
    M003  
       2018-01-28 23:25:32 +08:00
    http://mixj.s1.natapp.cc/demo/wx_tyt

    你们想要的是不是这个

    会自动跳转到红包页面

    而且我又给加上了复制....复制曾经饿了么的邀请码,邀请够三个人,20 的免单......

    我偷过两个大佬的跳一跳刷分接口,在外面包了一次,然后让别人用,领了 90 多个吧,向被偷的站长说声'对不起'

    ---------------------------------------------------------------

    做成短链接更逼真

    ``T.cn/R8ARy7k``
    MikeFeng
        66
    MikeFeng  
       2018-01-29 00:15:21 +08:00 via Android
    巨人网络的手游《街篮》就干了这事儿,安卓版的,每天第一次打开游戏都把那串东西写到剪切板里
    deadofpeople
        67
    deadofpeople  
       2018-01-29 10:36:47 +08:00
    xposed 应用管理,禁止访问剪贴板,禁止修改剪贴板,搞定
    hakil
        68
    hakil  
       2018-01-29 10:48:28 +08:00
    AD 快消....每天强奸一次...
    bob1994
        69
    bob1994  
       2018-01-29 12:53:39 +08:00
    华为手机,UC 浏览器和自带浏览器测试情况:复制失败,
    不知道为什么。
    KevZhi
        70
    KevZhi  
       2018-01-29 13:03:08 +08:00 via iPhone
    @MonoLogueChi 很少见到手机端 web 操作剪贴板正用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:08 · PVG 19:08 · LAX 03:08 · JFK 06:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.