如何隐藏 javascript 文件中存储的密码以使用 PDF.JS 打开 PDF 文件?

问题描述 投票:0回答:3

我正在开发一个网络应用程序,它基本上使用 pdf.js 打开一个 pdf 文件。 pdf 文件受密码保护。这是代码摘录。

    var the_password = 'thepassword';
    var pdf = 'document.pdf';
    var loading = pdfjsLib.getDocument({ url: pdf, password: the_password });

因此,在客户端,每个人都可以看到我的密码,我不希望这样,因为我的目标是没有人可以在网络应用程序之外使用 pdf 文件。

如何保护密码?

提前感谢您。

javascript security password-protection pdf.js drm
3个回答
2
投票

没有什么办法可以让您 100% 确定用户不会找到密码。你能做的最好的事情就是混淆 JavaScript 代码,使没有高度动机(通常是高技能和一点空闲时间)的攻击者无法读取它。

你能做什么呢?好吧,请注意,积极主动的攻击者可以制作页面的屏幕截图并运行 OCR 工具,所以问题是 - 您想投入多少资金来缓解无法修复的问题 -绝对不择手段。


0
投票

可以通过开发控制台检查进入浏览器的所有数据。并且所有存储在浏览器中的数据也可以通过控制台查看。人们应该假设一旦进入浏览器就没有什么是安全的。

那么该怎么办...?在不说明您试图通过受密码保护的 PDF 来解决什么问题的情况下,我将提供一些想法。

  1. 当下载来自批准的来源和/或用户时,在服务器端将 PDF 转换为无密码
  2. 在下载时为每个用户转换 PDF,每个用户都有自己的密码。它可能是可以在浏览器中计算的某些用户属性的哈希值。这也可以兼作水印。
  3. 将密码发送到越界(电子邮件、短信)并让用户将其输入到 UI 中。
  4. (在最后评论后添加)使用 PDF 的 DRM 系统。 Adobe 有一个内容服务器

#2 的一个问题是有人可以在 JS 代码中找到你的哈希算法,可以算出每个文件的密码。但你知道是谁干的。


0
投票

谢谢大家的回答。

确实正如你们大多数人所说,我的问题没有真正的解决方案。但我认为每个人都会在 javascript 文件开头设置纯文本密码。

这就是我所做的:

  1. 创建一个 php 文件,其中包含我的密码
<?php echo 'password' ?>
  1. 然后,当我需要它使用 pdf.js 加载我的 pdf 文件时,我会执行 Ajax 请求
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) 
    {
        loading = pdfjsLib.getDocument({ url: pdf_url, password: this.responseText 
    }
);
xmlhttp.open("GET", "filewithpassword.php", true);
xmlhttp.send();

仍然有一种简单的方法可以找到密码,但它仍然比纯文本更好,我会坚持使用这个。

感谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.