Во-первых - и, пожалуйста, не обижайтесь на это - тот факт, что вы задаете этот вопрос, предполагает, что вы не имеете права писать программное обеспечение, посвященное личной информации. Даже если вы правильно поняли эту проблему, вы можете делать другие ошибки. Я бы рекомендовал потратить некоторое время на OWASP website и получить базовое представление о безопасности веб-приложений.
Далее вы не должны помещать файлы PDF в общедоступную веб-папку. Если кто-то перенаправляет URL-адрес (независимо от того, насколько сильно хэширует имя файла) кому-то, у кого не должно быть доступа к нему, ваша модель безопасности ломается. Запретить перечисление файлов недостаточно - вы не должны позволять кому-либо обращаться к файлам PDF без ввода учетных данных.
Вы можете сделать это наиболее легко с помощью файла .htaccess - и если ваш хостинг-провайдер не поддерживает это, я бы поставил под вопрос их пригодность для проекта, в котором хранятся конфиденциальные данные.
Если вы действительно должны, вы можете создать «сквозной» PHP-скрипт.Таким образом, если URL является http://myserver.com/personalPDF.php?personID=JoeBlogs
, файл personalPDF будет использовать следующий код псевдо
if user is not logged in
redirect to log-in page
if user does not have access to requested document
redirect to "unauthorized" page
set PDF mime type
read requested document from disk and send to client
В PHP, последние две строки что-то вроде:
<?php
$file="JoeBlogs.pdf";
header('Content-disposition: attachment; filename='.$file);
header("Content-type: ".mime_content_type($file));
header('Content-Transfer-Encoding: binary');
ob_clean();
flush();
readfile($file);
?>
насчет веб-копир, который копирует файлы рекурсивно ? Не поймает ли он PDF-файлы, предположительно загадочные имена здесь не помогут? –
Я не понимаю, как это возможно. Он ищет все ссылки на веб-странице и рекурсивно открывает эти страницы. Если вы никогда не ссылаетесь на свой PDF-файл, т. Е. Сохраняете их скрытыми и незарегистрированными, вы должны быть хорошими. – apartridge
Что делать, если кто-то получает доступ к ссылкам через закладку, историю браузера, проверку трафика на проводе (исходный вопрос не указывает, что сайт использует SSL), или кто-то случайно делится электронной почтой? Стратегия в этом ответе обычно называется «безопасность через неясность», и это обычно неодобрительно. По крайней мере, сделайте ссылки «одноразовыми» - они должны истечь после первого использования. –