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

在线文档需要防止被截图,防止下载,但是能直接打印,前后端需要怎么设计?

  •  1
     
  •   yeshenyue · 2021-10-09 14:54:41 +08:00 · 9980 次点击
    这是一个创建于 901 天前的主题,其中的信息可能已经有所发展或是发生改变。

    给用户的开发的功能就是在线文档能预览电子版和直接打印,但要防止用户截屏和保存电子版,前端后端怎么设计文档格式,怎么调用打印功能?就指导思路

    106 条回复    2022-04-01 20:22:45 +08:00
    1  2  
    kkocdko
        1
    kkocdko  
       2021-10-09 14:58:06 +08:00 via Android   ❤️ 4
    不可能,打印的时候可以选虚拟打印机
    Blanke
        2
    Blanke  
       2021-10-09 14:58:48 +08:00
    不可能,浏览器打印的时候直接可以保存为 pdf
    janus77
        3
    janus77  
       2021-10-09 14:59:25 +08:00   ❤️ 2
    那我打印出来再拍照算什么?
    paopjian
        4
    paopjian  
       2021-10-09 15:00:21 +08:00
    打印和截图的边界在哪里?
    cuixiao603
        5
    cuixiao603  
       2021-10-09 15:01:06 +08:00
    又是老板提的需求吗
    littlewing
        6
    littlewing  
       2021-10-09 15:02:22 +08:00   ❤️ 66
    离职
    gouflv
        7
    gouflv  
       2021-10-09 15:04:21 +08:00 via iPhone
    上客户端
    ioriyameng
        8
    ioriyameng  
       2021-10-09 15:04:26 +08:00
    无解。
    lakehylia
        9
    lakehylia  
       2021-10-09 15:04:59 +08:00   ❤️ 1
    提桶跑路
    minamike
        10
    minamike  
       2021-10-09 15:05:37 +08:00   ❤️ 4
    建议直接打印好寄给用户
    MHPSY
        11
    MHPSY  
       2021-10-09 15:08:53 +08:00
    虚拟打印机好像没办法防止
    DogeFlyKite
        12
    DogeFlyKite  
       2021-10-09 15:11:01 +08:00   ❤️ 1
    单是防止用户截屏就做不到吧,截图的方式千千万,就算上客户端也是没有办法完全避免的
    tabris17
        13
    tabris17  
       2021-10-09 15:12:45 +08:00
    不如想想如何辱骂提出这个需求的产品
    yeshenyue
        14
    yeshenyue  
    OP
       2021-10-09 15:13:28 +08:00
    @cuixiao603 是啊
    tabris17
        15
    tabris17  
       2021-10-09 15:15:03 +08:00
    @DogeFlyKite 防止静态截屏是有办法的,就是动态化逐行显示,类似 CRT 显示器逐行扫描的原理
    swordmaster
        16
    swordmaster  
       2021-10-09 15:16:24 +08:00   ❤️ 1
    哈哈,同一个世界,同一个老板,要求我们给 CRM 系统增加防截屏功能。
    debuggerx
        17
    debuggerx  
       2021-10-09 15:16:46 +08:00   ❤️ 2
    使用前强制用户同意协议,一旦发现用户有擅自截图和下载的行为,直接走法务部,需要赔钱 1w RMB,然后写一些监控埋点和隐形签名——这样 lz 不用多久就会升职加薪、当上总经理、出任 CEO 、迎娶白富美、走上人生巅峰[狗头]
    DogeFlyKite
        18
    DogeFlyKite  
       2021-10-09 15:17:07 +08:00   ❤️ 1
    举一个无解的例子,在 iOS 上无法阻止用户截屏,除非说你判断用户是在 iOS 的浏览器上打开的就直接不展示,只要你展示了就无法阻止用户截屏。
    做成 App 的话可以知道用户是否截屏,但是这个也是截屏完成后才通知的,所以只能知道截屏了,无法在截屏前做一些其他处理
    sexoutsex2011
        19
    sexoutsex2011  
       2021-10-09 15:18:39 +08:00
    截图防不了,打印 PDF 、另存为 mhtml 什么的还是可以防的,效果可以参考下 Google Docs 和 飞书文档之类的,不给编辑及下载权限。
    DogeFlyKite
        20
    DogeFlyKite  
       2021-10-09 15:19:05 +08:00
    @tabris17 这样的话用户体验也是有问题的吧
    masterclock
        21
    masterclock  
       2021-10-09 15:19:47 +08:00
    有一些卖打印机的有类似功能
    预览显示的是带水印、低清晰度的文档,直接打印出来也是带水印、低清晰度的
    要得到没有水印、高清的文档,需要用它的打印机、打印服务器打印,是个专用硬件,稍稍增加了破解难度
    abc0123xyz
        22
    abc0123xyz  
       2021-10-09 15:19:54 +08:00
    我直接拍屏
    Kinnice
        23
    Kinnice  
       2021-10-09 15:20:38 +08:00
    这个简单,需要用户购买你们专门定制的打印机和显示器,只有连接这个打印机和显示器才可以打印和预览,其他未授权的不允许。
    sexoutsex2011
        24
    sexoutsex2011  
       2021-10-09 15:21:35 +08:00
    @sexoutsex2011 #19 忽略我,审错题了
    yuhangch
        25
    yuhangch  
       2021-10-09 15:22:19 +08:00
    用户名贴上追责?
    abc0123xyz
        26
    abc0123xyz  
       2021-10-09 15:23:44 +08:00   ❤️ 2
    建议机器放到专门的房间,必需全裸进去,而且金属检测仪不能响,信号屏蔽器打开,在找两个保安一人牵条狗监视,有任何违规动作,就放狗去咬,然后拉去打靶。
    这样应该就行了
    abc0123xyz
        27
    abc0123xyz  
       2021-10-09 15:24:52 +08:00
    @abc0123xyz #26 必须
    rioshikelong121
        28
    rioshikelong121  
       2021-10-09 15:25:40 +08:00   ❤️ 2
    电子水印 事后追责
    tabris17
        29
    tabris17  
       2021-10-09 15:26:12 +08:00
    @DogeFlyKite 帧率足够应该能行
    sleepwalker
        30
    sleepwalker  
       2021-10-09 15:43:20 +08:00 via iPhone
    之前看 Netflix 的时候想截图,但是发现调用截图工具后页面黑屏了,不知道怎么实现的。
    riggzh
        31
    riggzh  
       2021-10-09 15:44:48 +08:00
    我直接采集卡截图,怎么防。
    xiongshengyao
        32
    xiongshengyao  
       2021-10-09 15:44:56 +08:00
    方案 A:
    1. 要求员工入职签订不平等的保密协议
    2. 每个员工进入平台登陆账号后,背景显示只属于该员工的隐藏水印
    3. 泄密后根据水印查到个人,追究刑事责任

    方案 B:
    1. 配备专门的办公用电脑,无法上外网,无法插 U 盘,重启后恢复系统
    xiongshengyao
        33
    xiongshengyao  
       2021-10-09 15:45:28 +08:00
    @xiongshengyao 方案 B 用的很广,基本上工厂里的电脑都是这样的
    debuggerx
        34
    debuggerx  
       2021-10-09 15:51:40 +08:00   ❤️ 1
    xingyuc
        35
    xingyuc  
       2021-10-09 15:53:29 +08:00
    前段时间有类似需求,找到了这个,但需求又不做了,你要不要试试: https://github.com/saucxs/watermark-dom
    docx
        36
    docx  
       2021-10-09 15:54:39 +08:00 via Android
    @DogeFlyKite #12 就算能禁止截图,那搞最原始的就好了。拍照,再不行手抄。
    codehz
        37
    codehz  
       2021-10-09 16:00:49 +08:00
    @sleepwalker 是 DRM 但是可以开 rdp 饶过限制(
    anxn
        38
    anxn  
       2021-10-09 16:13:29 +08:00 via Android
    打印好邮寄过去
    devon
        39
    devon  
       2021-10-09 16:19:54 +08:00 via iPhone
    专用加密硬件键盘,只给两个键,预览 /打印。只有检测并验证了就个键盘,才让进系统。
    snail00
        40
    snail00  
       2021-10-09 16:23:54 +08:00
    完全防止做不到
    1. 增加一些简单门槛, 防小白
    2. 增加访问者的指纹, 可追溯
    这两步一般使用就够了
    sarices
        41
    sarices  
       2021-10-09 16:41:16 +08:00
    只能物理防止了,看的时候先过安检,无任何摄像头设备才能进去看,然后看的时候一行行显示,显示几行把上面几行隐藏
    lbp0200
        42
    lbp0200  
       2021-10-09 16:58:23 +08:00
    使用量子物理的知识,就可以做到
    参考双缝干涉实验,B 站上就有介绍
    LudwigWS
        43
    LudwigWS  
       2021-10-09 17:19:11 +08:00 via iPhone
    下次开始研究如何防止在虚拟机截屏,如何防止物理拍摄了,答案就是要求实时开启摄像头对准用户和屏幕拍摄,有专门运营人员监控
    dallaslu
        44
    dallaslu  
       2021-10-09 17:25:58 +08:00
    自己做打印机,封闭系统;

    禁止添加虚拟打印机和截图功能;

    网站只能用这种专用的打印机才能访问;

    打印机仅支持特制光敏纸,拍照或扫描时字迹自动销毁;

    打印时自动增加水印:「扫描无效」;

    打印时自动为纸张添加白磷涂层,做到物理上的阅后即焚;

    增加摄像头,一旦摄像头被遮挡或识别到有相机、手机拍照,或者有镜子试图绕过拍照限制,则打印机自动爆炸销毁;

    若有人长时间盯住屏幕,则自动闪烁,避免人肉照相机;

    ……
    faustina2018
        45
    faustina2018  
       2021-10-09 17:29:44 +08:00
    去把用户键盘上的 printscreen 按键抠掉吧
    只能这样了
    yeshenyue
        46
    yeshenyue  
    OP
       2021-10-09 17:35:45 +08:00
    @dallaslu 你要是产品经理估计会火。。。
    ZField
        47
    ZField  
       2021-10-09 17:47:06 +08:00
    很明显是一个不合理的需求,辩不过就快跑!
    chaleaoch
        48
    chaleaoch  
       2021-10-09 17:52:09 +08:00
    无法截图这个已经超过了浏览器的能力了吧?
    cheng6563
        49
    cheng6563  
       2021-10-09 17:58:58 +08:00
    交错显示呗
    Imindzzz
        50
    Imindzzz  
       2021-10-09 18:01:42 +08:00
    防止打印没法的,只有加数字指纹好溯源。
    0o0o0o0
        51
    0o0o0o0  
       2021-10-09 18:05:51 +08:00
    截图肯定是不可能阻止的,只要是能看见的,就肯定能被捕获。
    可以试一试添加遮罩,比如棋盘遮罩或者颜色混合的遮罩或者加入噪声等,让用户无法获取高清原图。
    nbndco
        52
    nbndco  
       2021-10-09 18:08:17 +08:00
    可以的,iOS,Android,macOS 都可以直接用官方 API 屏蔽截图。
    nbndco
        53
    nbndco  
       2021-10-09 18:08:38 +08:00
    @DogeFlyKite 可以的,iOS,Android,macOS 都可以直接用官方 API 屏蔽截图。
    0o0o0o0
        54
    0o0o0o0  
       2021-10-09 18:09:54 +08:00
    不过如果是打印,那基本上没办法,你总是要把数据传到打印机的,所以说完全没有意义。
    Jface
        55
    Jface  
       2021-10-09 18:11:37 +08:00
    人为控制吧,安排个人专门负责这个任务
    youngce
        56
    youngce  
       2021-10-09 18:22:26 +08:00
    请问贵司的用户群体是盲人吗
    yolee599
        57
    yolee599  
       2021-10-09 18:25:01 +08:00
    打印的时候直接选择虚拟打印机就能输出 pdf 了
    TomatoYuyuko
        58
    TomatoYuyuko  
       2021-10-09 18:33:05 +08:00
    设计一套光学摩尔纹遮罩呗
    zjsxwc
        59
    zjsxwc  
       2021-10-09 18:38:28 +08:00 via Android
    五彩缤纷的黑?
    zjsxwc
        60
    zjsxwc  
       2021-10-09 18:39:02 +08:00 via Android
    楼主的需求应该询问专业产品经理,而不是问我们程序员
    zjuster
        61
    zjuster  
       2021-10-09 19:01:32 +08:00
    @zjsxwc 怎么实现我不管,明天上线
    alfchin
        62
    alfchin  
       2021-10-09 19:31:50 +08:00 via iPhone
    @DogeFlyKite 防截屏做得到。每一帧显示图片的一部分,每秒 24 帧人眼无法察觉但是截图无效
    luwill
        63
    luwill  
       2021-10-09 19:35:59 +08:00
    低端:拍照
    高端:视频卡
    netnr
        64
    netnr  
       2021-10-09 20:06:14 +08:00 via Android
    打开文档触发:键盘截屏键键帽弹射起飞
    liuidetmks
        65
    liuidetmks  
       2021-10-09 20:29:05 +08:00   ❤️ 4
    找佳能定制一个打印机型号,单独开发驱动程序,定义一套自己的描述语言 ,只有你的程序能预览,能打印。
    年费 vip 会员免费送,增加安全性的同时,还能增加用户粘性,送这么好的打印机放家里可不能荒废了。
    什么?你说成本兜不住,别和你开玩笑?
    是你先开玩笑的。
    jiayong2793
        66
    jiayong2793  
       2021-10-09 21:29:25 +08:00
    只要是能被显示器显示出来的,理论上都可以截图、打印,甚至拍照;
    这是脑残才想出来的需求;
    如果是防止被盗用建议打上水印,并将 pdf 全部二进制化;
    如果是防止下载传播的,在线预览的内容全部图片化,水印印上用户姓名,谁传播出去的一目了然;
    hst001
        67
    hst001  
       2021-10-09 21:41:25 +08:00 via Android
    可以的,开个网吧,专门使用这个文档系统,使用的时间派产品经理盯着用户,代码不用改。
    leimao
        68
    leimao  
       2021-10-09 22:13:54 +08:00
    从入门到放弃,你是完全忽视操作系统开发 app 的吗?
    James369
        69
    James369  
       2021-10-09 22:38:34 +08:00
    虽然这个需求很变态,但是也是有办法解决的。
    开发专门的显示系统(专门显示器+专门眼镜+用户需要服用量身定制药物才能看到),这样其它人都看不到,且无法截屏 /保存等等。
    那么,不仅可以赚软件的钱,还可以赚硬件的钱,以及药品的钱,一举三得。
    darknoll
        70
    darknoll  
       2021-10-09 22:39:26 +08:00
    提出这种需求的基本上啥都不懂的,直接离职即可。
    CivAx
        71
    CivAx  
       2021-10-09 23:17:19 +08:00   ❤️ 2
    只要有输出,就能被捕获,这应该是每一个 IT 人都懂的道理。

    一直以来对于内容保护基本都围绕输出渠道进行加密并去 C 端解密,包括但不限于特殊的 C 端播放器、流媒体分片传输+动态秘钥、特殊色彩 /图像格式、特殊协议 /硬件识别( DRM )。

    就算财大气粗的流媒体服务商对下载( Web-DL )做了百般防护,也逃不掉被录屏( Web-Rip )的命运,何况你一个简简单单的在线文档呢?

    防是防不住的,你的出发点只能够是 “我默认用户已经绕过我的君子限制拿到了我的文档”,然后在此之上去考虑后续追责的方案设计。甚至还可以钓鱼,明面上不限制截图,但是在客户使用前予以醒目警告禁止截图,一旦截图触发 activator 就后台隐秘记录一次。
    MiketsuSmasher
        72
    MiketsuSmasher  
       2021-10-09 23:36:39 +08:00
    代码和人,有一个能跑就行(
    MiketsuSmasher
        73
    MiketsuSmasher  
       2021-10-09 23:39:50 +08:00
    不好意思,上一条我的回复是我发错地方了
    djoiwhud
        74
    djoiwhud  
       2021-10-10 00:05:53 +08:00 via Android
    这是个自欺欺人的功能。欺负人家的手机不能拍照么?
    wdlth
        75
    wdlth  
       2021-10-10 00:17:37 +08:00
    你想看连蓝光、HDCP 、WideVine 等等都被破解了,你有多少技术和精力去和这些巨头相比……
    yidinghe
        76
    yidinghe  
       2021-10-10 00:36:47 +08:00 via Android
    如今谁还截图啊,都是直接拿手机拍了
    billlee
        77
    billlee  
       2021-10-10 02:15:34 +08:00
    不可能,商用打印机驱动输出的格式就是 PostScript, 相当于 PDF
    c0xt30a
        78
    c0xt30a  
       2021-10-10 02:21:20 +08:00
    @alfchin 同一个画面多截图几次求平均就可以了吧?
    Mac
        79
    Mac  
       2021-10-10 03:25:20 +08:00
    我老婆她们银行有个内部桌面系统,类似沙盒,可以在外网登陆,你在这个沙盒里保存的所有文件都是加密的,只能在沙盒环境下正常打开,发到外部环境就是一堆乱码。也就只能做到这步,对着屏幕拍照片是拦不住的。
    datou
        80
    datou  
       2021-10-10 04:21:11 +08:00
    @sleepwalker 用 edge 可以绕过 netflix 截图限制
    ysc3839
        81
    ysc3839  
       2021-10-10 06:03:27 +08:00
    @sleepwalker #30 那是浏览器提供的 DRM 功能。
    liuzhedash
        82
    liuzhedash  
       2021-10-10 08:35:34 +08:00
    最接近的是各大厂商的云桌面,相当于远程访问一台无法链接外设的 pc,但是截屏和拍照是无法制止的
    dingyx99
        83
    dingyx99  
       2021-10-10 08:43:52 +08:00
    能打印就没法限制下载,现在各家都自带了输出到 PDF
    sggggy
        84
    sggggy  
       2021-10-10 09:47:27 +08:00
    @luwill 视频卡采集-》 AI 文字识别-〉转写—》各大平台推流,一气呵成。
    IvanLi127
        85
    IvanLi127  
       2021-10-10 09:52:35 +08:00 via Android
    快进到开发一体终端设备。
    datoo
        86
    datoo  
       2021-10-10 09:53:06 +08:00
    这个简单。取消在线文档,直接给客户发纸质文档不就行了
    wanguorui123
        87
    wanguorui123  
       2021-10-10 10:02:40 +08:00
    防君子不防小人
    deszon
        88
    deszon  
       2021-10-10 10:13:23 +08:00
    限制不能截屏,需要看一下怎么理解不能截屏,如果仅仅是不允许使用系统截屏,这个可以搞;
    不能保存电子版就有点扯了,就算是程序实现了,但是打印出来,很快就识别出来,很多 OCR 连格式都能识别完成
    Osk
        89
    Osk  
       2021-10-10 12:10:18 +08:00
    防止截图: 就算你 c 端程序阻止用户截图, 但只要价值足够, 一个 hdmi 采集卡也就 400 不到, 效果很好, 硬件外挂如何破解呢? hdcp 早已破解, 采集卡也能复制显示器的名称, 基本上检测不到啊...

    防止电子版: 打印后, 直接扫描一遍, 存成 pdf 美滋滋.



    看你们希望防住哪些用户和资料的价值了:
    通过法律手段: eula 加黑让用户确认泄露风险, 吓住部分用户.
    加上水印, 前端 /c 端可以加上明水印和盲水印. 希望截图 /采集卡的用户好自为之.
    web 端限制过多,建议上客户端:
    - 调用 api 阻止截图和录制;
    - 打印前检查打印机名称, 驱动, 端口等信息, 尽量避免被虚拟打印. (反面教材: 我见过某系统拒绝虚拟打印机, 然后把打印机名称从 Adobe pdf 改成 hp xxxx, 绕过了...)


    至于打印后扫描, 这个还真不知道怎么防, 只能加明水印了, 盲水印是难以抗住这种情况的.
    Huelse
        90
    Huelse  
       2021-10-10 12:13:36 +08:00
    看看百度文库,豆丁是怎么做的,顶多是只提供部分预览
    tediorelee
        91
    tediorelee  
       2021-10-10 12:36:49 +08:00
    @datou 我用 edge 看 nf 还是不能截图呢,一截就是黑的
    nil333
        92
    nil333  
       2021-10-10 13:01:51 +08:00
    但凡你敢让我看到的,我就有办法记录下来。
    jasy
        93
    jasy  
       2021-10-10 13:15:02 +08:00
    能让我看到我还保存不了下来?这不可能的事
    retrocode
        94
    retrocode  
       2021-10-10 14:21:12 +08:00
    可以参考 百度文库 预留使用 canvas 实现 至少对非登录用户只展示部分 加上水印 能提高一下泄露风险,但是完全防止是不可能的, 禁止截屏感觉没什么意义,你防不住手机直接拍的,不如换个思路,况且浏览器也没那么高的权限
    kingfalse
        95
    kingfalse  
       2021-10-11 07:57:34 +08:00 via Android
    你跟老板说想屁吃呢
    xuanbg
        96
    xuanbg  
       2021-10-11 08:09:12 +08:00
    专用电脑
    SmiteChow
        97
    SmiteChow  
       2021-10-11 09:46:18 +08:00
    能做,但需要搞定脑机接口,图像直接加密转化为脑电波,在脑中解密反馈给神经系统。

    搞定前面的,打印就简单了,直接打印二维码,还是复用脑机接口。
    hack
        98
    hack  
       2021-10-11 09:47:08 +08:00
    xvast ?
    yeshenyue
        99
    yeshenyue  
    OP
       2021-10-11 09:47:27 +08:00
    @Osk 说的有道理,哎
    SmiteChow
        100
    SmiteChow  
       2021-10-11 09:49:55 +08:00
    总体来讲这个需求在可理解范围内,我见过不可理解的,需求不允许任何形式的泄露,什么文字描述,灵魂画手复刻都不允许。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3181 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:27 · PVG 20:27 · LAX 05:27 · JFK 08:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.