Запретить пользователю копировать файл с сайта - PullRequest
0 голосов
/ 30 марта 2012

У меня есть несколько изображений и PDF-файл на моем сервере, которые я использую на своем сайте Путь к изображениям

<img src ='/import/folder/image.jpg'>

Каждое изображение связано с PDF-файлом, который находится вместе с изображением, например, PDF для вышеуказанного изображения будет находиться по адресу /import/folder/pdffile.pdf

.

источник изображения виден пользователям

когда кто-то просматривает источник страницы, копирует источник изображения и вставляет URL-адрес после моего базового URL-адреса

предположим, мой базовый URL-адрес localhost.com если кто-то вручную напишет localhost.com/import/folder/image.jpg, он сможет получить доступ ко всем моим изображениям и файлам PDF, даже ко всей моей файловой системе

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

Я использую php и codeigniter

Заранее спасибо

Ответы [ 5 ]

2 голосов
/ 30 марта 2012

он может получить доступ ко всем моим изображениям и PDF-файлу

так работает сеть.

даже вся моя файловая система

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

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

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

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

1 голос
/ 30 марта 2012

В зависимости от емкости вашего сервера и размера файлов, вы можете сделать следующее:

  1. Поток оба - файл JPEG и PDFиспользуя то, что я называю «data-proxy» - PHP-скрипт, который читает содержимое файла и передает его обратно в браузер, например (будьте осторожны, чтобы установить правильный тип содержимого) (аналогично тому, что предложил Stony, хотя он оставил файл чтения() частично):

    $file_path = $download;
    header('Content-Description: File Transfer');
    header('Content-Type: audio/mpeg');
    header('Content-Disposition: attachment; filename="'.$_GET['file'].'"');
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file_path));
    ob_clean();
    ob_end_flush();
    readfile($file_path);
    exit;
    
  2. Запутать файлы .Сделайте имена файлов похожими на md5 ($ filename. $ Salt) и удалите расширение файла.Если у вас есть файлы в разных папках (например, / images и / pdf)), вам не нужно расширение для потоковой передачи, поскольку вы только читаете содержимое файла.Вы также можете разместить их вне доступного веб-пространства (я думаю, для этого вам нужен open_base_dir), поэтому никто, кроме вас, не сможет получить к ним доступ.Используйте .htacces для дальнейшего ограничения доступа к файлам, как описано в других ответах.

  3. Используйте сеанс для вышеуказанного сценария, поэтому только зарегистрированные пользователи получают потоковую передачу.

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

  5. СделатьPDF-файлы защищены паролем .Хотя это не совсем безопасно, так как его легко удалить, оно заставляет обычных пользователей бегать к стене ... Вы можете сделать это и на стороне сервера с помощью автоматического скрипта.

1 голос
/ 30 марта 2012

В этом случае трудно предотвратить загрузку ваших изображений людьми.Когда вы используете «/ import / folder /», это общая папка на вашем веб-пространстве.Вы можете сохранить путь с помощью .htaccess.

Для ваших файлов PDF вы можете доставить файл PDF по php.

<a href="getpdf.php?file=123.pdf">Get PDF 123</a>

В сценарии вы можете проверить, есть ли у пользователя праваскачайте файл и убедитесь, что файл существует и верните PDF как приложение / pdf.

header('Expires: Thu, 19 Nov 1981 08:52:00 GMT'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: no-cache'); 
header("Content-Type : application/pdf"); 
header("Content-Disposition: attachment; filename=".$filename.".pdf"); 

Тогда люди смогут загрузить файл.Но в этом случае вам нужно сохранить PDF-файл.

Редактировать:

Затем положить .htaccess в папку с помощью

deny from all

<FilesMatch "\.pdf$">
    Order Allow,Deny
    Deny from all
</FilesMatch>
0 голосов
/ 30 марта 2012

Вы можете использовать это в .htaccess

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://your_site_url/.*$ [NC]
RewriteRule \.(jpg)$ - [F]

Это предотвратит прямой доступ к изображениям, но изображения будут видны на вашем сайте

0 голосов
/ 30 марта 2012

Поместите Options -Indexes в файл .htaccess, который вы помещаете в localhost.com/import/folder/ (или выше в дереве документов). Это отключит доступ к файловой структуре в localhost.com/import/folder

Предотвращение доступа пользователей к вашим файлам - это нечто иное, как предположил Стони, вы можете передавать файлы с помощью php.

Редактировать: Я видел ваш комментарий о том, что люди "угадывают" URL изображения. Вы можете хранить все изображения с зашифрованным именем файла. Что-то вроде хеша md5 имени файла и времени загрузки вместе взятых. Затем сохраните эти зашифрованные имена в таблице базы данных ...

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