У меня есть личный портфолио, и у меня есть некоторые файлы в формате 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 в ответ.