JackShcherbakov
@JackShcherbakov

Как получить доступ к фотографиям, которые располагаются вне дерева веб документов?

Здравствуйте, коллеги! Недавно столкнулся со следующей проблемой, над которой я бьюсь уже несколько дней:

Есть конструктор сайтов. Все файлы пользователей, которые они создают и редактируют сохраняются вне дерева веб документов. Для предпросмотра/редактирования файла используется php скрипт-посредник. Этот скрпит инклудит требуемый файл (в нашем случае - файл для предпросмотра/редактирования), а также исключает ситуацию, когда пользователи могут получать доступ к файлам других юзеров, в то время как основной код подключает этот самый скрпит.

Но проблемы начинаются, когда пользователь захочет добавить картинку на свой сайт. Допустим, в файле (который, повторюсь, находится вне дерева веб-документов) встречается вот такая вот строчка (в результате загрузки фото пользователем, и добавлением фото в каталог проекта юзера посредством специального интерфейса):
<img src='photo.jpg'>
А вот тут самое интересное.
Допустим, вот так выглядет каталог проекта пользователся (вне дерева веб-документов):
  • photo.jpg
  • index.html

А вот так выглядет каталог, содержащий файлы для предпросмотра пользовательского файла (напомню, что эти файлы инклюдят пользовательские файлы, и эти самые файлы могут быть также подключены (при помощи подключения или iframe)):
  • preview.php

При запуске preview.php (с необходимыми параметрами, разумеется) обнаружется, что вывод содержит недействительную ссылку (photo.jpg).

Так вот, как реализовать механизм, который не имел бы вышеописанной проблемы. Можно ли внести какие-либо поправки в существующую систему для решения проблемы? Как бы сделали Вы?

Очень важно как-то изолировать пользователей друг от дргуа. Я имею в виду безопасность - через браузер (и без надлежащей авторизации) получить достпу к файлам пользователей получить должно быть попросту невозможно.
Заранее выражаю огромную благодарность всем, кто поможет
  • Вопрос задан
  • 171 просмотр
Решения вопроса 2
Stalker_RED
@Stalker_RED
Вместо <img src='photo.jpg'>
делаете <img src='userphoto.php?user_id=42'>

Внутри этого userphoto.php
$user_id = $_GET['user_id'];
...
if (проверка доступа) {
  $file = "папка юзера/photo.jpg";
  $type = 'image/jpeg';
  header('Content-Type:'.$type);
  header('Content-Length: ' . filesize($file));
  readfile($file);
} else echo "нет прав - нет и фоточек!";
Ответ написан
demon416nds
@demon416nds
Разработчик на чем попало
и в чем проблема?
измените процедуру загрузки чтобы у пользователя вставлялась правильная ссылка
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
nginx x-accel-redirect

например
/userfiles/1.jpg
через htacess заворачивается на скрипт, который по имени домена/субдомена
определяет ид клиента. из него путь.
дальше проверяем кто может видить файл (все или только юзер)
проверяем авторизацию и что он владелец
отдаем директиву x-accel-redirect или 403 ошибку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы