как защитить паролем загружаемые pdf-файлы на веб-сайте

У меня есть личный портфолио, и у меня есть некоторые файлы в формате pdf, такие как

<a href="file.pdf">Some file</a> 

Я не хочу, чтобы все загружали файл, и я хочу, чтобы он защищал его паролем, чтобы я мог поделиться им только с людьми, которых знаю

где только тот, кто дает правильный пароль, может загрузить мой файл

Примечание: 1. с его персонального портфолио веб-сайта у него нет никаких «логинов»,
2. Я разработал веб-страницу с HTML как отзывчивый код

Ваши предложения, пожалуйста, любым способом сделать это без .htaccess ??

Используйте MySQL или MySQLite – в зависимости от ваших предпочтений – и сохраните ссылку на PDF в базе данных. Затем используйте скрипт, например download.php. Сохраните пароль для файла в базе данных и попросите пользователя ввести его перед загрузкой файла. Если вы не знакомы с базами данных, вы МОЖЕТЕ делать все это на PHP.

ОЧЕНЬ грубый макет (без базы данных, если вы знакомы с dbs, настройте соответственно)

Форма HTML

 <form name="download" id="download" method="post" action="download.php"> <input type="password" id="password" name="password" /> <input type="submit" id="submit" value="Download" /> </form> 

PHP (download.php)

 <?php // Get the password $pw = md5($_POST['password']); // Compare against the stored password $valid_pw = md5("your password you want to use"); if($pw != $valid_pw){ echo "Error! You do not have access to this file"; }else{ header("Location: /path/to/your/file.pdf"); } ?> 

ЗАМЕТКИ:

Я использовал чрезвычайно простой метод шифрования пароля. Я бы исследовал лучшие методы, если это было мое приложение, но для краткости и простоты понимания я использовал простое сравнение хеша md5() .

Вам нужно использовать php-файл для подачи файла, где файлы PDF хранятся в папке NON PUBLIC.

Например, разместите свои pdf-файлы в общедоступном каталоге, скажем: / home / pdfs /

И ваш PHP-скрипт в общедоступном каталоге accessable, скажем: / home / public_html /

Внутри скрипта в общедоступном каталоге поставьте:

 if (isset($_GET('password')) { die('wrong password'); } if ($_GET['password'] != 'mypass') { die('wrong password'); } $file="/home/pdfs/test.pdf"; header("Pragma: public"); header('Content-disposition: attachment; filename='.$file); header("Content-type: ".mime_content_type($file)); header('Content-Transfer-Encoding: binary'); ob_clean(); flush(); readfile($file); 

Используйте значения GET для определения загружаемого файла, но чтобы обеспечить лучшую безопасность, разрешите расширения .pdf, разделите все остальные периоды и слэши, чтобы они не перемещались по каталогам вашего сервера и не получали важные файлы безопасности, содержащие пароли и т. Д. !!! Чтобы быть еще более безопасным, вы только назовите свои файлы в формате pdf с помощью символов az 0-9 и – или _

А затем, когда вы захотите загрузить файл, верните URL-адрес сценария выше и убедитесь, что файл pdf существует в не общедоступном каталоге.

Следуйте советам @ rsmith84, но убедитесь, что вы заблокировали доступ к папке:

Файл Apache .htaccess

 Deny from all 

Файл IIS web.config

 <system.webServer> <security> <authorization> <remove users="*" roles="" verbs="" /> <add accessType="Allow" roles="Administrators" /> </authorization> </security> </system.webServer> 

Тогда пусть доставка возможна только с файлом PHP. Проверьте пользователя и затем readfile('/protectd/file/path') из вашей защищенной папки.

Создайте файл php, скажем, download.php и ссылку на этот файл.
Вы можете проверить правильный пароль там, и если это правильно, вы можете записать содержимое файла PDF в ответ.