Лучшая стратегия для защиты загружаемых файлов -php / mysql Apache2 server - PullRequest
11 голосов
/ 21 марта 2011

Я попытаюсь выяснить, как защитить каталог от несанкционированного или не прошедшего проверку пользователя для загрузки файлов. Спасибо заранее.

Ответы [ 4 ]

11 голосов
/ 21 марта 2011

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

Существует простой способ ограничить доступ к папкам на основе авторизации сеанса PHP с использованием php. Это требует создания заглушек для допустимых авторизованных сеансов (и автоматизации их удаления). В PHP вы делаете:

if ($user_has_permission_to_download)
{
   touch("tmp/access-" . session_id()); 
}

Тогда для авторизации можно использовать простую rewriterule + rewritecond:

RewriteCond %{HTTP_COOKIE}        PHPSESSID=(\w+)
RewriteCond ../tmp/access-%1      -f 
RewriteRule ^(.+)$  $1  [L]

RewriteRule .+  /deny   [L]

Первый блок разрешает доступ, когда найдено соответствующее значение cookie и существует файл-заглушка авторизации. Второе правило блокирует доступ для всех остальных.

3 голосов
/ 21 марта 2011

Поместите файл .htaccess в каталог с файлами со следующим содержимым

deny from all

Затем создайте сценарий, который использует, например, readfile () для обслуживания файлаесли пользователь авторизован.

2 голосов
/ 21 марта 2011

Я предполагаю, что у вас где-нибудь есть скрипт user / login, который аутентифицирует пользователя?Используйте правила перезаписи .htaccess для пересылки запроса файла через скрипт php, который проверяет переменную сеанса, если пользователь вошел в систему, а затем возвращает файл.

Что-то из лося:

.htaccess
RewriteEngine on
RewriteRule ^(.*).(pdf|exe|doc|whatever)$ some-script.php?file=$1.$2 [L]

<?php
if(loginCheck()) //function somewhere that checks session if user is logged in
{
  return fopen('../files/' . $_GET['file']); //open and return the requested file
}

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

И чтобы люди не могли просто зайти в каталог файлов, я рекомендую поместить файл .htaccess в папку THAT и сказать deny from all, чтобы остановить ВСЕХот доступа к нему.

2 голосов
/ 21 марта 2011

.htaccess - ваш лучший друг.Положите запретить всем в этот файл .htaccess.Или, если вы не хотите использовать шифрование файла .htaccess и все время менять путь загрузки (LOL!).

...