Используйте htaccess для проверки с помощью php перед предоставлением доступа к каталогу - PullRequest
2 голосов
/ 25 июля 2011

Я работаю над приложением, в котором пользователи могут создавать учетные записи и загружать изображения, которые хранятся в каталоге, а затем могут отображаться в самом приложении или в общедоступной части приложения. Теперь я действительно хотел бы защитить изображения, чтобы ТОЛЬКО разрешить доступ к этим изображениям в случае, если выполняются определенные условия, то есть, установлен сеанс или установлены общие права доступа в БД для изображения, чтобы назвать несколько .

Итак, мне нужно, чтобы всякий раз, когда изображение из этого каталога загружалось, файл htaccess передает имя изображения в php-файл в этом каталоге, который выполняет все необходимые проверки, и если он возвращает true, htaccess может продолжить выкладывание изображения (находится ли оно в теге или просто введено в адресную строку браузера).

Я просмотрел много сообщений, но ничего не нашел. Я не могу себе представить, что это невозможно, поэтому за кого-то, кто может предложить руководство, будут молиться - и если вы находитесь в местном масштабе, ну, другие преимущества могут быть в запасе!

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Сохраните загруженные изображения в недоступной для Интернета папке, затем Используйте правило перезаписи для пересылки запросов в php; Что-то вроде: RewriteRule ^images/([^/]+) /image.php?img=$1 [NC]

Проведите валидацию в php и, если все в порядке, перешлите изображение из нечитаемой папки через php; что-то вроде

header('Content-type: '.$mime);
header('Content-length: '.filesize($filename));
$file = @ fopen($filename, 'rb');
if ($file) {
  fpassthru($file);
  exit;
}
1 голос
/ 25 июля 2011

На вашем месте я бы переместил все ваши изображения в определенную папку, а затем создал бы скрипт php, который называется image.php:

<?php

// You may want to use image name depending on 
// if you can fetch the name from the db from an id
// You need the filename to open the image later

$iid = 0;
if(isset($_GET['iid']))
    $iid = (int)$_GET['iid'];

// Check session
// Check database permissions ect.

// If you don't want this image to be output call die();

// If it's a go, output the image.

// Change this to the type of the image you're about to output
header('Content-Type: image/png');

readfile('images/'.$image_filename);

?>

Вы можете настроить свой .htaccess как:

RewriteRule ^images/(.*)$ image.php?iid=$1 [L]

Так что, когда делается запрос для images/10.jpg, он вместо этого вызывает ваш скрипт с iid=10.jpg

Вы можете немного изменить свой .htaccess, в зависимости от того, хотите ли вы использовать идентификаторы или имена файлов и т. Д., Возможно, вы не захотите передавать .jpg. То же самое со сценарием. Дайте мне знать, если у вас есть какие-либо вопросы:)

1 голос
/ 25 июля 2011

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

отрицать все

и создайте PHP-интерфейс в другом каталоге, который будет брать путь или просто имя файла изображения из $ _GET и проверять, выполнены ли условия, и возвращать изображение, например

header("Content-type: image/jpeg");
readfile("/path/to/my/images/$image");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...