【问题标题】:Can't verify password on client side无法在客户端验证密码
【发布时间】:2021-01-01 21:24:42
【问题描述】:

我正在尝试在我的网页上使用pdf.js,我需要在将 PDF 上传到服务器之前验证用户输入的密码是否正确。

但我无法让它工作。

我使用 CDN 托管 pdf.min.js

<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.min.js" integrity="sha512-Z8CqofpIcnJN80feS2uccz+pXWgZzeKxDsDNMD/dJ6997/LSRY+W4NmEt9acwR+Gt9OHN0kkI1CTianCwoqcjQ==" crossorigin="anonymous"></script>

这是密码检查功能:

function checkPass() {
pdfjsLib.getDocument({
        url: 'pdf.pdf',
        password: '01010101'
    }).promise.then(function (pdf) {
        input.classList.add("rightpass");
    }).catch(function (error) {
        input.classList.add("wrongpass");
        console.log(error);
    });
} 

并在控制台日志中记录Deprecated API usage: No "GlobalWorkerOptions.workerSrc" specified.

我尝试通过pdfjsLib.disableWorker = true; 禁用它,但没有成功。

我只需要验证密码,其他什么都不渲染。

【问题讨论】:

  • 这样做的目的是什么?如果您在客户端验证密码,则无法实现安全性,因为您的后端端点直到打开才能上传未经验证的文件,并且您的密码检查可以被规避。过滤掉不需要的 pdf 文件的正确方法是在服务器上 - 上传任何文件,测试密码,删除文件并在密码不匹配时返回错误。
  • pdf文件的客户端密码检查是为了更快的用户体验。
  • 所以你在后端仔细检查密码?
  • 并非如此。 pdf 受密码保护,为了处理不太常见的错误,例如密码错误,我会在客户端检查它们。
  • i c。好吧,我在 pdf.js 上找不到任何好的文档(这很令人惊讶,因为谁是供应商)。对不起,我不能再帮你了。不过,我怀疑“折旧”警告与您无法验证密码这一事实无关。

标签: javascript html pdf web pdf.js


【解决方案1】:

这是一个工作代码示例:

<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.6.347/pdf.worker.min.js"></script>
<script>
    const pdfName = "empty-protected.pdf";
    async function loaded()
    {
        const loadingTask = pdfjsLib.getDocument({ url: pdfName, password: "qwerty" });
        loadingTask.promise.then(() => console.log(1, "OK"), (ex) => console.log(1, ex));
        
        const loadingTask2 = pdfjsLib.getDocument({ url: pdfName, password: "" });
        loadingTask2.promise.then(() => console.log(2, "OK"), (ex) => console.log(2, ex));
    }
</script>
</head>
<body onload="javascript:loaded();">
</body>
</html>

这是我用于实验的受密码保护的pdf文件(密码为qwerty):

https://mega.nz/file/lJg2GKgS#AdVJ0DZ1OfsGrlSqM67dfr_r2n8lBiiOm9q0o4wt7e4

包含pdf.worker.min.js 会将警告"Warning: Deprecated API usage: No "GlobalWorkerOptions.workerSrc" specified." 更改为"Warning: Setting up fake worker."

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2020-09-03
  • 1970-01-01
  • 2018-05-05
  • 2019-06-23
  • 2014-08-12
  • 2016-01-26
相关资源
最近更新 更多