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

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

  •  7
     
  •   MonoLogueChi · 266 天前 · 12065 次点击
    这是一个创建于 266 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近手机剪切板经常被强奸,我好像也看到过,有人提问剪切板到底是怎么被强奸的,就简单的写了一篇文章讲述某些网站是怎么强奸你的剪切板的,文章地址是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
        1
    Showfom   266 天前 via iPhone   ♥ 4
    岂不是放入支付宝红包口令卡然后就等着别人领红包去了
        2
    MonoLogueChi   266 天前
        3
    sobigfish   266 天前
    @Showfom #1 最近很多网站 小程序 都这么干( app 估计也有 只是不好抓现行)
        4
    youyaang   266 天前
    @Showfom 已经有很多这样干了,是真的烦
        5
    littlebutt   266 天前 via iPhone
    我更想知道 clipboard.min.js 里面是怎么实现的。。
        6
    q33q33   266 天前 via Android
    所以手机端怎么防止 js 强奸呢?
        7
    sobigfish   266 天前
    @q33q33 #6 我准备去找个 adblock 的浏览器提个 feature request
        8
    xiaopc   266 天前 via Android
        9
    coolcoffee   266 天前   ♥ 1
    @littlebutt 利用这个 document.execcommand('copy')实现的

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

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

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

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

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

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

    你们想要的是不是这个

    会自动跳转到红包页面

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

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

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

    做成短链接更逼真

    ``T.cn/R8ARy7k``
        66
    MikeFeng   265 天前 via Android
    巨人网络的手游《街篮》就干了这事儿,安卓版的,每天第一次打开游戏都把那串东西写到剪切板里
        67
    deadofpeople   264 天前
    xposed 应用管理,禁止访问剪贴板,禁止修改剪贴板,搞定
        68
    hakil   264 天前
    AD 快消....每天强奸一次...
        69
    bob1994   264 天前
    华为手机,UC 浏览器和自带浏览器测试情况:复制失败,
    不知道为什么。
        70
    KevZhi   264 天前 via iPhone
    @MonoLogueChi 很少见到手机端 web 操作剪贴板正用的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   746 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 22ms · UTC 23:16 · PVG 07:16 · LAX 16:16 · JFK 19:16
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1