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

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

Ответ 1

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

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

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

Затем вместо авторизации может быть использована простая перезапись + rewritecond:

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

RewriteRule .+  /deny   [L]

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

Ответ 2

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

deny from all

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

Ответ 3

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

Ответ 4

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

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

.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, чтобы остановить доступ КАЖДОГО.