• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jiafaner
V2EX  ›  程序员

用什么样的方法防止图片被抓取?

  •  
  •   jiafaner · Sep 12, 2018 · 12200 views
    This topic created in 2804 days ago, the information mentioned may be changed or developed.
    公司接了个活,老板说能赚不少钱,对外展示高清照片,后端存储什么的都做好了,现在做到前端了

    其中所有匿名用户都能够看到一部分照片,其他的需要登录才能看,但客户的要求是图片需要防止被任意抓取

    有没有什么技术能实现随便被抓的,也不用完全避免被抓取,只要能相对不容易被下载就好了
    Supplement 1  ·  Sep 13, 2018
    感谢大家的回复,感谢已送出,就不单独回复了

    现在的方案是这样的:

    所有图片在服务器里面,通过加密生成字符串,同时尝试生成隐藏的水印

    客户端解密后展示出来

    加密和解密使用临时的 salt,

    限制一下访问频率。

    就先这样了,谢谢
    97 replies    2018-09-13 16:57:33 +08:00
    huangke
        1
    huangke  
       Sep 12, 2018   ❤️ 1
    个人觉得这个需求没有两把刷子做不到吧?看看其他人有什么高见
    Cheez
        2
    Cheez  
    PRO
       Sep 12, 2018 via Android   ❤️ 1
    ....还防止任意抓取,反正只要有登陆账户就能抓你的图片,你只能控制他抓取的频率,频率高就封号封 ip。图片本身就验证 http 头,就这样了。
    imn1
        3
    imn1  
       Sep 12, 2018
    介绍那个什么四姐骂客腚,或者中国什么图网给你的客户
    Sor
        4
    Sor  
       Sep 12, 2018
    好奇网站内容,防止被任意抓取是只有登录查看的图片还是包含匿名也可以看到的图片呢
    xor
        5
    xor  
       Sep 12, 2018 via iPhone   ❤️ 2
    js 获取加密图片,解密后绘制到 canvas
    opengps
        6
    opengps  
       Sep 12, 2018   ❤️ 1
    高清图片的下载展示用积分,积分用钱买
    F1024
        7
    F1024  
       Sep 12, 2018
    漫画网站 你去研究下 一般都有防下载
    anteros
        8
    anteros  
       Sep 12, 2018   ❤️ 1
    所见即所得,只能控制"见",比如 VIP 会员每天可见次数限制,或购买才可见
    wizardoz
        9
    wizardoz  
       Sep 12, 2018   ❤️ 1
    用瓦片图显示图片
    rexxtem07
        10
    rexxtem07  
       Sep 12, 2018 via iPhone
    FlashPlayer 解密显示?
    wuhhhh
        11
    wuhhhh  
       Sep 12, 2018 via iPhone
    叼如 eh 也挡不住爬虫的,但是人家直接把大陆 ip 禁了
    moult
        12
    moult  
       Sep 12, 2018 via iPhone   ❤️ 15
    不管怎么做,都防不了用户直接截图。
    ericgui
        13
    ericgui  
       Sep 12, 2018   ❤️ 1
    其实这无解的,你只能先搞起来,然后看日志,人工对某些坏蛋进行截留。

    说白了反爬虫,先有爬虫,再去反吧?
    001enoolleh
        14
    001enoolleh  
       Sep 12, 2018   ❤️ 1
    加水印,超大范围的那种,
    KgM4gLtF0shViDH3
        15
    KgM4gLtF0shViDH3  
       Sep 12, 2018
    @xor #5 那 js 怎么防止被抓到呢
    zpf124
        16
    zpf124  
       Sep 12, 2018
    @xor canvas 也能右键另存为图片的吧...


    我感觉可能除了 被淘汰的 flash 以外,就只有裁剪成 n 块碎片,然后用 css 拼成一张图,这样视觉上是一张图,dom 结构上则是杂乱无章的。

    但这只能防扒原图,包括 flash 也不能防止人家截图。
    jswh
        17
    jswh  
       Sep 12, 2018   ❤️ 1
    websocket 加密传输图片数据,接收后画到 canvas 上可能可以。性能网速啥的可能不好。
    jswh
        18
    jswh  
       Sep 12, 2018
    @zpf124 canvas 右键保存的是整个 canvas 的样子,如果要不能右键就甚至 backgrou-img 就好了
    jswh
        19
    jswh  
       Sep 12, 2018
    @jswh background-img
    pinews
        20
    pinews  
       Sep 12, 2018   ❤️ 1
    图片不要用 img 标签,全改成 background-image,应该能防一部分。
    @jswh
    nilrust
        21
    nilrust  
       Sep 12, 2018   ❤️ 1
    简单啊,

    类似之前流行的 QQ 群 那种 付费看图,

    图片用 base64 传送内容,也就没有真正意义上的图片链接地址,没付费前传模糊图片,付费后传一次清楚的图片。
    stargazer242
        22
    stargazer242  
       Sep 12, 2018
    全图水印
    LuffyGu
        23
    LuffyGu  
       Sep 12, 2018
    backgroun-image 也能抓。
    NicholasYX
        24
    NicholasYX  
       Sep 12, 2018
    加水印
    MorningBOBO
        25
    MorningBOBO  
       Sep 12, 2018
    给你的图片加水印,抓取你就是变相推广.不是美滋滋
    jiafaner
        26
    jiafaner  
    OP
       Sep 12, 2018
    @Sor 这块的需求还不明确,但目前来说,客户只提了强烈的需求,就是不能随便被抓走了
    jiafaner
        27
    jiafaner  
    OP
       Sep 12, 2018
    @NicholasYX
    @MorningBOBO 加水印这个说过了,可是客户说不能全部打水印。
    luoway
        28
    luoway  
       Sep 12, 2018
    往 canvas 标签里绘制图片,图片是 base64 的更好(但性能更差)
    fuermosi777
        29
    fuermosi777  
       Sep 12, 2018   ❤️ 5
    预览时显示一个低分辨率的缩略图,鼠标点击一个区域(比如 x=30,y=40),后端计算位置然后加载这个区域的高清图(比如 w=100,h=100 ),用户每点击一处,显示一处的高清图。我们之前学校负责照毕业照的奸商就是这么干的(为了防止下载高清毕业照)。
    jiafaner
        30
    jiafaner  
    OP
       Sep 12, 2018
    @fuermosi777 太厉害了。
    maxxfire
        31
    maxxfire  
       Sep 12, 2018
    把图片做成视频,让它慢慢爬吧。
    tomfs
        32
    tomfs  
       Sep 12, 2018   ❤️ 2
    不加盐,貌似只能这样了.
    https://www.patrick-wied.at/talks/image-protection/demos/demo-encrypted.html
    加盐的话,用 webgl 吧
    ala2008
        33
    ala2008  
       Sep 12, 2018
    学习哈。。
    vjnjc
        34
    vjnjc  
       Sep 12, 2018   ❤️ 1
    感觉和技术无关。

    没登录,或者是普通用户给他看普通图,vip 用户才给看高清图~
    这也防不了 vip 用户用技术手段下载图片,只能法律见了。
    txwd
        35
    txwd  
       Sep 12, 2018
    插个眼,也想知道有什么好办法
    3a3Mp112
        36
    3a3Mp112  
       Sep 12, 2018
    天狼星之类的客户端是能最大限度的防止技术手段录像和截图的。
    但是直接过手机拍照无解。
    kernel
        37
    kernel  
       Sep 12, 2018 via Android
    把大图随机分割成大量小图, 在客户端拼接起来显示
    infra
        38
    infra  
       Sep 12, 2018
    不展示原图,只用 image-data 展示原图编码
    alwayshere
        39
    alwayshere  
       Sep 12, 2018   ❤️ 1
    后端把图片打乱,前端拼成 css sprite 展示,但是我用 phantomjs 截图又完了,所以,这题无解
    aitaii
        40
    aitaii  
       Sep 12, 2018
    手机拍照无解
    bumz
        41
    bumz  
       Sep 12, 2018   ❤️ 1
    简单地说,能免费看到就能免费抓到

    各种技术只不过防零预算小白,大不了我雇佣一堆廉价劳动力手工截图
    weipt
        42
    weipt  
       Sep 12, 2018
    用一般网站验证码的技术控制图片
    uuair
        43
    uuair  
       Sep 12, 2018   ❤️ 5
    不要用技术解决问题。。。。你把图片放到视觉中国上去,然后谁用了你的图,就让视觉中国起诉他。你俩一起赚钱,何乐不为。
    yksoft1
        44
    yksoft1  
       Sep 12, 2018   ❤️ 3
    也只有加水印或者不可见数字水印了。
    图源拿 JS 加密了,防不住浏览器插件;浏览器插件防住了,防不住操作系统的截图;操作系统的截图防住了,防不住 VGA/HDMI 采集卡。
    bumz
        45
    bumz  
       Sep 12, 2018   ❤️ 3
    放一个服务器加密,前端解密的 demo

    https://bumfo.github.io/protect/index

    打开控制台,只能看到一个加密过的脚本和加密过的图片
    VgV
        46
    VgV  
       Sep 12, 2018
    flash
    locoz
        47
    locoz  
       Sep 12, 2018   ❤️ 1
    注册需要正常手机号+注册最后一步付费验证+登陆付费可见+每天可见高清图片数量限制+图片加密后 js 渲染+隐式水印,js 高度混淆+动态生成+每次更换。
    这样够复杂了吧?然而还是挡不住人家招一群实习生手动截图保存
    TomatoYuyuko
        48
    TomatoYuyuko  
       Sep 12, 2018
    加水印加法律声明,不然截屏或者拍照岂不是无解。
    w516322644
        49
    w516322644  
       Sep 12, 2018
    @uuair 2333
    Famio
        50
    Famio  
       Sep 12, 2018   ❤️ 1
    赞同图片加水印,数字的那种
    这里是我之前看到过的方案: http://accu.cc/content/pil/watermark/
    JmmBite
        51
    JmmBite  
       Sep 12, 2018   ❤️ 1
    记得有个漫画是把每张图片分为 N 部分打乱合成,然后前端重组后正常显示。
    hicdn
        52
    hicdn  
       Sep 12, 2018   ❤️ 1
    @fuermosi777 用 phantomjs 把图点一遍,就可以下载完高清图,再用 imagemagic 拼接好。现在用 chrome headerless 更方便了
    zsdroid
        53
    zsdroid  
       Sep 12, 2018   ❤️ 1
    @bumz #45 你以为去掉 canvas 的鼠标事件就万事大吉了??

    coolcoffee
        54
    coolcoffee  
       Sep 12, 2018   ❤️ 1
    可以参考一下 pexels.com ,注册和登录都要过 Google 家 reCAPTCHA 的,然后登录后才能下载高清图, 每下载 10 张就触发一次 reCAPTCHA 验证。 整个网站应该上百万条数据,要一个个点验证码几乎不可能了。
    bumz
        55
    bumz  
       Sep 12, 2018
    @zsdroid #53 canvas 保存图片和和截图的原理是一样的,这个只要绘制 canvas 的时候加上水印就行了
    xd314697475
        56
    xd314697475  
       Sep 12, 2018
    我记得我们老师讲过

    把图切成若干个部分,然后+水印

    前几天遇到一个网站是对访问进行限制,大概是必须包含特定头文件才能访问
    uptime
        57
    uptime  
       Sep 12, 2018   ❤️ 1
    感觉是 H 站……
    sampeng
        58
    sampeng  
       Sep 12, 2018   ❤️ 1
    其实没什么意义。你防一次。我只要下一次就可以无限制分发。
    除了水印,几乎无解。网页版的东西。有无数办法爆破。。flash 会好点。分块成无数的小图片。然后 flash 按规则拼起来。但你也挡不住直接屏幕截图的。。。。
    sampeng
        59
    sampeng  
       Sep 12, 2018   ❤️ 1
    如果你的东西很有价值。。要知道中国有一批人是天天在家闲着没事干的。。人力外包 1 张图 1 毛钱-1 块钱。大把的人抢着干
    bk201
        60
    bk201  
       Sep 12, 2018
    有个做法就是转成 flash
    qiuqiuer
        61
    qiuqiuer  
       Sep 12, 2018
    截图 特征搜索 没什么办法
    qsbaq
        62
    qsbaq  
       Sep 12, 2018
    几乎无解~
    hackxing
        63
    hackxing  
       Sep 12, 2018   ❤️ 1
    大佬们,可以看看中国汽车报的图片处理,我是没抓回来图片。
    http://www.cnautonews.com/
    defel
        64
    defel  
       Sep 12, 2018 via iPhone
    截图无解,如果还不行,手机对着电脑拍照就更无解了。。
    mYYnSmiTEQWcCwAr
        65
    mYYnSmiTEQWcCwAr  
       Sep 12, 2018
    @bumz F12 控制台直接对 canvas 转 base64
    document.querySelector("body > canvas").toDataURL("image/png")
    xider
        66
    xider  
       Sep 12, 2018 via Android
    webp,header 里设置成 jpeg
    crab
        67
    crab  
       Sep 12, 2018
    这和防止视频翻录一样无解
    mYYnSmiTEQWcCwAr
        68
    mYYnSmiTEQWcCwAr  
       Sep 12, 2018   ❤️ 1
    @tomfs 虽然 js 里面把 canvas 的 toDataURL 给覆盖了 但我们还是可以创建一个 iframe 来获取原本的函数
    var i = document.createElement('iframe');
    i.style.display = 'none';
    document.body.appendChild(i);
    var c=i.contentDocument.createElement("canvas")
    c.toDataURL.call(document.getElementsByTagName("canvas")[0])
    WriteJob
        69
    WriteJob  
       Sep 12, 2018
    了解一下~
    yankebupt
        70
    yankebupt  
       Sep 12, 2018   ❤️ 1
    @jiafaner
    如果是观赏类图片(口水)
    不知道可不可以打一个 alpha 值很低不影响美观效果,但是抠图起来特别费劲且必定留痕迹的彩色智能水印.....
    楼主下次发这个帖子的时候贴两张图诱惑一下我们也好有动力回帖啊....
    这次就算了,说不定问之前都是有图库没版权放出来要出事...下次记得买几张图放出来贿赂一下 233
    jiafaner
        71
    jiafaner  
    OP
       Sep 13, 2018
    @yankebupt 不是观赏类的图啊,是一些特别专业的一些行业图,都是些图纸啥的,也有一些有版权的照片,还有一些奇怪的不认识的东西
    libook
        72
    libook  
       Sep 13, 2018   ❤️ 1
    puppeteer 项目了解一下,你就理解了什么是能见到就能抓到。

    CDN Token 鉴权、Canvas 绘制、高频水印、IP 限流等等无非就是提升爬图的难度,但都是可破解的,防菜鸟不防大牛,之前新闻里说的阿里能在截图里藏匿截图者的信息,但这也只是为了事后调查保存证据。

    牛 13 的公司从来都是通过法务手段来解决版权问题的,参见迪斯尼、甲骨文和微软。。。
    HanSonJ
        73
    HanSonJ  
       Sep 13, 2018
    应该是美女图片项目,付费会员即可浏览全部高清无码大图
    icy37785
        74
    icy37785  
       Sep 13, 2018
    图片是真的难办,因为最不济可以截图呀。。。。
    billlee
        75
    billlee  
       Sep 13, 2018
    DRM, 一群顶尖软硬件厂商一起,从光盘武装到显示器都搞不好的问题。
    Rehtt
        76
    Rehtt  
       Sep 13, 2018 via Android
    录屏,截屏,拍照 基本无解
    yankebupt
        77
    yankebupt  
       Sep 13, 2018   ❤️ 2
    @jiafaner 图纸的话有个很不友好的方法,免费试用用户看到的都是程序随机抹过线的版本,自动擦除 5%到 15%的线或图例什么的(如果用户强迫症也可以做成固定 2%消除随机 13%每次刷新不一样之类),提前提示用户图纸处理过尽量办会员或充点积分啥的...
    yankebupt
        78
    yankebupt  
       Sep 13, 2018
    @jiafaner 但是如果图都是爬来的和真实作者的收益不挂钩这么做就很不妥了,很掉网站信誉值...
    tomfs
        79
    tomfs  
       Sep 13, 2018
    @cy97cool 讲究,留个联系方式,讨论下生活不
    akira
        80
    akira  
       Sep 13, 2018
    相对不容易?那就每张图片查看都需要给钱就好了啊
    fuermosi777
        81
    fuermosi777  
       Sep 13, 2018
    @hicdn 确实,算是防君子不防大牛吧 :)
    Fulcrum
        82
    Fulcrum  
       Sep 13, 2018 via Android
    FLASH
    Adamla
        83
    Adamla  
       Sep 13, 2018
    又能赚不少钱,又是高清图片,诶呀~~
    dikT
        84
    dikT  
       Sep 13, 2018
    @xor #5 那我就 chromedriver 走一波
    greatghoul
        85
    greatghoul  
       Sep 13, 2018 via Android
    除非不给用户展示高清图片,否则没有办法防的。
    greatghoul
        86
    greatghoul  
       Sep 13, 2018 via Android
    上面各种意淫的是没听过无头浏览器吧。
    cfq1491
        87
    cfq1491  
       Sep 13, 2018   ❤️ 1
    你要明白,图片就是给人看的,所以你就无法防止别人截图,只能限制截图出来的效果,比如展示缩略图,对图片进行水印处理;如果非要展示高清图片,就必须限制 IP 和账户下载次数,对账户进行支付宝信用验证等手段了;还有一个思路就是对图片链接随机处理。
    jydeng
        88
    jydeng  
       Sep 13, 2018
    @bumz 直接用 toDataURL() 可以拿到 base64,只能防普通用户
    shakoon
        89
    shakoon  
       Sep 13, 2018   ❤️ 1
    把大图以随机尺寸切割为不同大小的小图,这样在前端另存时就非常麻烦了。当然爬虫还是有办法能把图再拼接出来的,但也已满足“相对不容易被下载就好了”的需求了
    Mutoo
        90
    Mutoo  
       Sep 13, 2018
    碎图+乱序 DOM+随机反相滤镜+svg 反相滤镜恢复+css 乱序恢复+不等长动画载入+随机水印。
    imdoge
        91
    imdoge  
       Sep 13, 2018
    只能加隐藏水印事后起诉吧,所见即所得,大不了人家 puppeteer 截图咋防
    winglight2016
        92
    winglight2016  
       Sep 13, 2018   ❤️ 1
    要看具体需求了,目前我见过防抓取最严密的就是 google project art 了,当然了,这网站的初衷是为了解决超大分辨率图片的加载,不过间接导致我想下载到本地的时候发现根本无从下手——整张图只能靠手动拖来拖去然后等待加载高分辨率版本,我感觉这技术非常先进了
    hundan
        93
    hundan  
       Sep 13, 2018 via Android
    AES 后端加密前端解密,打盲水印,顶多就是这样了
    openbsd
        94
    openbsd  
       Sep 13, 2018   ❤️ 1
    技术上 会员制+数字盲水印+版权条款 可以解决大多数问题,至于 拍屏 /屏幕采集 的,相当于外置硬件了,你有那种长长的可以伸到用户家的望远镜么......
    codingKingKong
        95
    codingKingKong  
       Sep 13, 2018
    打水印, 要清晰, 要大~
    否则... 我数数啊, 爬虫解析 DOM 获取 URL, 模拟调用接口, 模拟截屏, 实在不行, 我还能用手机拍...
    Felldeadbird
        96
    Felldeadbird  
       Sep 13, 2018   ❤️ 1
    参考视觉中国的做法。抓让他们抓啊。。反正你声明好:
    本图片版权归 XXX 所有,任何非法盗取、使用……

    广撒网,等着钱进口袋。岂不美哉?
    459077797
        97
    459077797  
       Sep 13, 2018
    图片打印出来,放个展厅 谁要看就来看,不准拍照
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3020 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 231ms · UTC 00:20 · PVG 08:20 · LAX 17:20 · JFK 20:20
    ♥ Do have faith in what you're doing.