2013-11-07 2 views
1

В веб-приложение для преобразования изображений, которые я хочу, чтобы запретить прямой доступ к изображениям других пользователей и Я достигнуть его, добавив этот код в моем главном .htaccess файле:Как запретить доступ к изображениям, загруженным другим пользователем?

RewriteCond %{HTTP_COOKIE} !PHPSESSID=(.+) [OR,NC] 
RewriteCond %{HTTP_COOKIE}:%{REQUEST_URI} ^PHPSESSID=(.*?);:(?!.*?/usuarios/\1).* [NC] 
RewriteRule ^.*?/usuarios/.+?\.(gif|jpe?g|png|wbmp)$ - [R=403,L] 

Так как пользователи имеют свою собственную папку для загружать и преобразовывать изображения, это правило будет проверять, если вы ищете изображение, каталог которого соответствует вашему id_session, и выдает ответ 403, если он не соответствует.

Кажется, что все нормально, но если какой-либо пользователь присоединяет изображение и меняет scr с изображением другого пользователя (при условии, что он знает путь), он отображает это изображение.

Как я мог предотвратить это?

Вы можете проверить на http://itransformer.es

+1

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

+0

Он также реализован, но он не позволяет изменять собственный тег «img» и доступ к изображению. – Manolo

ответ

3

Как говорит @David Уд, такая логика должна быть реализована в приложении, например, следующим образом:

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

  2. Вам необходимо настроить свой веб-сайт для обработки виртуальных URL-адресов (Самый простой здесь быть правилом переписывают внутренне прохождения запроса URL в качестве параметра некоторого PHP (или любой другой) скрипт),

  3. Затем в сценарии вы будете иметь полную свободу, чтобы проверить, является ли матча запрос ваша политика,

  4. И если запрос является законным, ваш скрипт сможет открыть запрошенный файл изображения и отправить его содержимое в качестве ответа веб-сервера.

+0

Но мне нужно показать изображение тегом 'img'. Как я могу это сделать, если он находится вне корня документа? – Manolo

+0

@ManoloSalsas Пожалуйста, прочитайте баллы №2; # 3; и # 4, а не только # 1. – Adi

+0

@ManoloSalsas: тег IMG ссылается на URL-адрес, однако в этой схеме URL-адрес является виртуальным: '/ uploads/myuser/mypict.jpg' не будет напрямую отображать изображение, но правило перезаписи будет передавать этот URL как параметр в сценарий '/uploads.php? url = myuser/mypict.jpg', и этот скрипт будет иметь возможность доступа и отправки содержимого файлов вне корневого каталога сети (корневой каталог веб-сервера не применяется к скриптам 'функции обработки файлов). –