代码之家  ›  专栏  ›  技术社区  ›  Sam Schutte

防止Adobe PDF中的“另存为”

  •  4
  • Sam Schutte  · 技术社区  · 14 年前

    我们有必要防止在网络驱动器上保存PDF文件的额外副本。目前,我们已经尽可能地“锁定”了PDF格式,这意味着要防止复制/粘贴、编辑和打印。但是,客户端要求任何人在打开PDF后都不能创建它的附加副本。

    使用本地PDF,这是不可能的,因为首先,他们总是可以点击浏览器中的链接,然后“另存为…”到他们的桌面。此外,他们可以点击“另存为…”内的杂技阅读器,没有办法(除了黑客)关闭。另外,即使我们入侵了Acrobat查看器,他们也有可能在另一个第三方查看器中查看并重新保存PDF。

    有两个最初的选择浮现在脑海中:

    1. 使用DRM提供程序锁定对文件的访问-由于费用原因,这不是一个选项

    2. 创建一个将文件转换为TIFF的web服务,然后用“secret”密钥将其加密,并将其作为“.abc”文件提供。为只在客户端网络内部运行的“.abc”文件创建一个特殊的查看器,并打开该文件并对其进行解密。如果没有自定义查看器,则无法查看文件。他们可以复制它们,但如果查看器被锁定到各自的计算机上,或者必须在公司网络中运行(例如,在启动前检查web服务中的密钥),则他们制作的任何副本都将无法打开。

    3. 创建一个Flash或Silverlight查看器,它基本上执行与上面相同的操作,但从未实际将文件保存到PC中-只是在浏览器中显示它。

    有没有其他更简单的选择?目标不是要有100%的防爆安全措施,只是要防止员工轻松地制作拷贝,将这些拷贝通过电子邮件发送给竞争对手、朋友或其他不应该访问这些敏感文件的人。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Andrew Barber Eric Lafortune    14 年前

    您提到的唯一一个有可能工作的选项(而且实现成本不会太高)是自定义阅读器。

    读卡器应用程序不应该存储任何“机密”信息(如密钥),它应该只能通过私有web服务访问密钥和图像数据,在内部使用。你已经注意到了。

    它也不应该存储文件;只需将密钥和数据加载到内存中,解密图像,然后为其提供查看。

    真正困难的部分是转换数据。剩下的大部分是基本的东西。

    这里的警告是,用户仍然可以很容易地打印屏幕并保存图像。

    最终,让他们看到文档但不保存文档的唯一真正安全的方法是完全阻止他们在他们有任何物理或通用网络访问权限的系统上查看文档。

        2
  •  2
  •   jbenet    14 年前

    好吧,难道他们还不能用打印屏幕获取信息吗?最后,用户可以手工重写。安全实际上只是提高门槛,让窃取信息变得太乏味或太费时。

    我想说的是,方法2是非常精细的,将消耗你的大量时间,同时仍然容易打印屏幕。我会做第3个,在那里你可以重用很多现有代码,并获得类似的安全级别。

        3
  •  1
  •   Gerald Davis    14 年前

    考虑到你的限制,没有办法完全安全。如果这些数据足够有价值,人们就会找到办法。最原始的是手动复制,上面的一步是为每页拍照(手机),上面的一步是打印屏幕,上面的一步是一些打印屏幕宏,将所有页面保存到文件夹中,上面的一步是从内存中读取。

    如果你的目标仅仅是“足够好”的安全性 (理解它可能会失败,但大多数用户不会愿意这样做)将是一个“客户读者”。它可以通过闪光灯或银光灯来完成。它甚至可以通过一个独立的winform应用程序来完成。

    有用于显示pdf的库。你可以简单地将pdf文件“包装”在一个加密层中,给它一个唯一的扩展名(pdx),让你的“自定义播放器”解密并显示pdf。假设您正在实现一个pdf库,那么您可以精确地控制可用的选项。您还应该研究使打印屏幕更困难的技术,因为接下来您只需将攻击向量移动到打印屏幕。

        4
  •  -1
  •   eggy    10 年前

    可以使用脚本或组策略禁用打印屏幕键。

    一个例子是 copied out below from here .

    Windows外壳脚本

    # =============================================================================# 
    #* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF          *# 
    #* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED           *# 
    #* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A          *# 
    #* PARTICULAR PURPOSE.                                                        *# 
    # =============================================================================# 
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] 
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,04,00,00,00,2a,e0,37,e0,00,00,37,e0,00,00,54,00,00,00,00,00 
    # ****************************************************************************** 
    # The sample scripts are not supported under any Microsoft 
    # standard support program or service. The sample scripts 
    # are provided AS IS without warranty of any kind. Microsoft 
    # further disclaims all implied warranties including, without 
    # limitation, any implied warranties of merchantability or of 
    # fitness for a particular purpose. The entire risk arising out 
    # of the use or performance of the sample scripts and documentation 
    # remains with you. In no event shall Microsoft, its authors, or  
    # anyone else involved in the creation, production, or delivery of  
    # the scripts be liable for any damages whatsoever (including, without 
    # limitation, damages for loss of business profits, business  
    # interruption, loss of business information, or other pecuniary loss) 
    # arising out of the use of or inability to use the sample scripts or 
    # documentation, even if Microsoft has been advised of the possibility 
    # of such damages. 
    # ******************************************************************************