Ограничить доступ к файлу авторизованным пользователям php - PullRequest
6 голосов
/ 10 апреля 2009

Я унаследовал приложение с явной дырой в безопасности.

Он имеет безопасность на основе сеанса, но загрузка файлов (которые зависят от пользователя) никоим образом не защищены и хранятся в общедоступном дереве файлов.

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

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

Есть ли у кого-нибудь опыт реализации подобных вещей или какие-нибудь хорошие альтернативные решения? Конкретные примеры синтаксиса .htaccess очень ценятся, так как я борюсь в этой области.

Ответы [ 3 ]

6 голосов
/ 10 апреля 2009

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

.htaccess выглядит так:

RewriteEngine on
RewriteRule path/to/where/these/files/live/(.*) /handlerscript.php/$1

Затем вы выбираете оставшийся путь и имя файла из $_SERVER['PATH_INFO'].

3 голосов
/ 10 апреля 2009

Ну, вы можете сделать apache-файл .jpg для определенной папки, добавив следующее в ваш .htaccess

AddHandler php5-cgi .jpg

тогда вы можете установить файл php для разбора запроса так, как вас рекомендует хаос, и выполнить определенную проверку, а затем просто вернуть заголовки jpeg вместе с правильным изображением, которое вы хотите отобразить

вот пример

<?php
if($validUser)
    {
    header("Cache-control: No-cache");
    header("Pragma: No-cache");
    header("Content-Type: image/jpeg");
    //correct picture address
    $img = imagecreatefromjpeg("2326_b_lil.jpg");
    imagejpeg($img);
    }
    else
    {
    //code for error image
    }
?>

пожалуйста, дайте мне знать, если вы хотите более обширный пример

0 голосов
/ 10 апреля 2009

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

Сценарий может взять веб-путь к изображению, решить, есть ли у пользователя доступ, а затем использовать что-то вроде fpassthru для передачи фактического изображения в браузер.

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

Так что вместо доступа к изображениям с помощью /images/123/5423453245.jpg, это будет /image.php?images/123/5423453245.jpg

Или что-то похожее на это.

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