Не удается проверить пароль на стороне клиента

#javascript #html #pdf #web #pdf.js

#javascript #HTML #PDF #веб #pdf.js

Вопрос:

Я пытаюсь использовать 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; , но это не сработало.

Мне просто нужно проверить пароль и больше ничего, без рендеринга.

Комментарии:

1. какова цель этого? если вы подтвердите пароль на клиенте, вы не достигнете безопасности, потому что ваша серверная конечная точка до сих пор открыта для загрузки непроверенных файлов, и ваша проверка пароля может быть обойдена. правильный способ отфильтровать ненужные файлы PDF находится на сервере — загрузите любой файл, проверьте пароль, удалите файл и верните ошибку, если пароли не совпадают.

2. Проверка пароля на стороне клиента для файлов PDF предназначена для ускорения работы с пользовательским интерфейсом.

3. итак, вы дважды проверяете пароль на серверной части?

4. не совсем. pdf защищен паролем, и для выполнения работы по обработке с менее распространенными ошибками, такими как неправильные пароли, я проверяю их на стороне клиента.

5. i c. ну, я не смог найти никакой хорошей документации по 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."

Комментарии:

1. как я упоминал в своем комментарии, что pdf.worker.min.js был тот, который мне был нужен. поскольку это основной уровень библиотеки. смотрите здесь mozilla.github.io/pdf.js/getting_started спасибо, Дэниел, за уделенное время, приятель.