2013-07-11 3 views
1

У меня есть сайт, на котором хранятся личные данные о людях. Вся эта информация находится в базе данных, а страницы, разрешающие доступ к этой информации, защищены паролем. Однако в последнее время мне приходится хранить файлы PDF, содержащие некоторую часть этой информации. Эти PDF-файлы хранятся в папке на сервере. Я поместил index.html в эту папку, чтобы предотвратить поиск.Защита PDF-файлов на веб-сервере от открытого доступа

Однако, я беспокоюсь о копирах веб-сайтов, таких как HTTrack, которые могут выполнять рекурсивный поиск. У меня нет доступа к .htaccess, так как хостинг-сервис этого не позволяет.

Как я могу хранить PDF-файлы в защищенном виде? Я использую php и MySQL.

ответ

0

Если у вас есть файл index.html, который будет препятствовать тому, чтобы содержимое каталога было указано сервером. Теперь вам нужно беспокоиться о том, что люди угадывают имена файлов ваших файлов. Вы можете хранить их по загадочным именам. Взгляните на хэш-функции для генерации случайных строк.

Когда вы разрешаете пользователю загружать файл, вы должны использовать скрипт PHP для чтения содержимого файла и отправки правильного заголовка MIME. Вы не должны ссылаться непосредственно на загадочные имена, чтобы сохранить эти имена в секрете. Сценарий PHP может выполнить правильную проверку пользователей.

Но сначала вы должны проверить, позволяет ли ваш хост помещать файлы в папку, которая не является общедоступной. Если вы можете хранить файлы в непубличной папке, вы в хорошей форме.

+0

насчет веб-копир, который копирует файлы рекурсивно ? Не поймает ли он PDF-файлы, предположительно загадочные имена здесь не помогут? –

+0

Я не понимаю, как это возможно. Он ищет все ссылки на веб-странице и рекурсивно открывает эти страницы. Если вы никогда не ссылаетесь на свой PDF-файл, т. Е. Сохраняете их скрытыми и незарегистрированными, вы должны быть хорошими. – apartridge

+0

Что делать, если кто-то получает доступ к ссылкам через закладку, историю браузера, проверку трафика на проводе (исходный вопрос не указывает, что сайт использует SSL), или кто-то случайно делится электронной почтой? Стратегия в этом ответе обычно называется «безопасность через неясность», и это обычно неодобрительно. По крайней мере, сделайте ссылки «одноразовыми» - они должны истечь после первого использования. –

2

Апарт-отель был прав, когда предложил использовать скрипт php для записи содержимого файла в ответ HTTP вместо ссылки непосредственно на файл.

Однако, когда конфиденциальные файлы должны быть защищены от несанкционированного доступа, есть еще один шаг: переместите файлы в каталог на сервере, который недоступен из Интернета. Я не так хорошо знаком с php, поэтому я буду использовать сайт asp.net в качестве примера, но вы должны хорошо следить за ним.

В Windows, путь к веб-сайту может быть C:\inetpub\wwwroot\MyWebsite\Index.html

Я бы хранить файлы в чем-то вроде C:\WebsiteFiles\ так что эти файлы просто не доступны из Интернета. Теперь вы можете контролировать доступ через php-скрипт и не беспокоиться о том, что люди или скрипты угадывают имена файлов.

+0

Это упоминается в моем первом комментарии. – apartridge

1

Во-первых - и, пожалуйста, не обижайтесь на это - тот факт, что вы задаете этот вопрос, предполагает, что вы не имеете права писать программное обеспечение, посвященное личной информации. Даже если вы правильно поняли эту проблему, вы можете делать другие ошибки. Я бы рекомендовал потратить некоторое время на 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); 
?>