PHP для защиты PDF и DOC - PullRequest
       34

PHP для защиты PDF и DOC

4 голосов
/ 15 сентября 2011

Я пытаюсь предоставить файлы .pdf и .doc авторизованным пользователям на веб-сайте. Пользователь может видеть страницу выбора файла только при входе в систему, но это не мешает неавторизованному пользователю просматривать документы, если он знает полный URL.

Как я могу предотвратить доступ этих файлов к неавторизованным пользователям?

Ответы [ 4 ]

8 голосов
/ 15 сентября 2011

ответ довольно прост, @Jon Stirling опубликовал это, когда я печатал, но я объясню немного больше для вас

один помещает ваши файлы за пределы вашей общедоступной директории html,

Настройка E.G cpanel

user/public_html
    /public_html/download.php

user/documents/
    /documents/file.doc
    /documents/file.pdf

@ dhh опубликовал базовый download.php php файл, однако, поскольку вы хотите принудительно загрузить их вещи, которые вы можете сделать, например, найти и предоставить правильный тип пантомимы, это расширение его кода как лучшего способа 1 форсировать загрузка файла, и 2 позволяют различные типы файлов

download.php

//check users is loged in and valid for download if not redirect them out
// YOU NEED TO ADD CODE HERE FOR THAT CHECK
// array of support file types for download script and there mimetype
$mimeTypes = array(
    'doc' => 'application/msword',
    'pdf' => 'application/pdf',
);
// set the file here (best of using a $_GET[])
$file = "../documents/file.doc";

// gets the extension of the file to be loaded for searching array above
$ext = explode('.', $file);
$ext = end($ext);

// gets the file name to send to the browser to force download of file
$fileName = explode("/", $file);
$fileName = end($fileName);

// opens the file for reading and sends headers to browser
$fp = fopen($file,"r") ;
header("Content-Type: ".$mimeTypes[$ext]);
header('Content-Disposition: attachment; filename="'.$fileName.'"');

// reads file and send the raw code to browser     
while (! feof($fp)) {
    $buff = fread($fp,4096);
    echo $buff;
}
// closes file after whe have finished reading it
fclose($fp);

P.S вот большой список типов пантомимы, если вы хотите добавить поддержку других файлов. http://www.hansenb.pdx.edu/DMKB/dict/tutorials/mime_typ.php

3 голосов
/ 15 сентября 2011

Вы должны хранить все загрузки вне вашего общедоступного / доступного для пользователя корня документа (но, конечно, внутри вашего basedir) и добавить сценарий загрузки для отправки загрузки, если пользователь авторизован.

Вот пример того, как «отправить» файл для его загрузки.

$file = "ireland.jpg";
$fp = fopen($file,"r") ;
header("Content-Type: image/jpeg");

while (! feof($fp)) {
    $buff = fread($fp,4096);
    print $buff;
}
3 голосов
/ 15 сентября 2011

Что вы можете сделать, это предоставить эквивалент PHP-прокси для файлов.

Разместите файлы вне webroot, затем напишите скрипт, который проверяет, что пользователю разрешен доступ.Если нет, перенаправьте их, если они это сделают, установите соответствующие заголовки и выведите данные файла.

1 голос
/ 15 января 2013

Это помогло мне: я поместил файлы .pdf и .htaccess со следующим кодом в обычную папку (я назвал ее «документами») на моем веб-сервере apache.1003 * Затем я взял код из ответа Мартина Баркера выше, изменил путь к файлу на «docs / sample.pdf» и вставил его в файл .php в моем корневом каталоге.Вот и все.Вы не можете получить доступ к файлу по URL, но вы можете скачать его, если запустите test.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...