Ограничить доступ к изображениям на моем сайте, кроме как через мои собственные htmls - PullRequest
2 голосов
/ 26 октября 2009

На моем веб-сайте я храню изображения пользователей простым способом, например: "Изображение / user_1.jpg".

Я не хочу, чтобы посетители могли просматривать изображения на моем сервере, просто используя user_ids. (Например: www.mydomain.com/images/user_2.jpg, www.mydomain.com/images/user_3.jpg и т. Д.) ...

Пока у меня есть три решения:

  1. Я пытался использовать .htaccess для защиты паролем папки «images». Это помогло мне до некоторой степени, но некоторые изображения начали выскакивать запрос имени пользователя и пароля на моем htmls (хотя удивительно, что некоторые изображения этого не сделали), так что это кажется непредсказуемым методом.

  2. Я могу начать преобразовывать мои user_id в хэш md5 с небольшим количеством соли. Изображения будут названы как /image/user_e4d909c290d0fb1ca068ffaddf22cbd0.jpg. Мне не нравится это решение. Это усложняет файловую систему.

  3. или я могу использовать функцию PHP readfile () или что-то подобное в Perl или Python. Например, я мог бы передать пароль, используя строку md5 для проверки посетителей как зарегистрированных пользователей, имеющих доступ к этому изображению.

Я склоняюсь к варианту 3, но с углом Perl или Python (при условии, что они будут быстрее, чем PHP). Однако я хотел бы увидеть другие идеи по этому вопросу. Может быть, есть простой трюк .htaccess к этому?

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

Большое спасибо,

Haluk

Ответы [ 5 ]

6 голосов
/ 26 октября 2009

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

5 голосов
/ 26 октября 2009

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

Метод №2 выглядит наиболее привлекательным для меня, поскольку он потребляет меньше ресурсов процессора, но с помощью только user_id, переданного через функцию md5, имя файла все еще довольно легко угадать. Вы должны пойти на md5 («моя секретная строка». $ User_id) для лучшего решения.

Почему вы выбираете # 3 через Perl или Python? Что не так со скоростью PHP? В самом деле, если вы защищаете свои изображения таким образом, вам следует приложить дополнительные усилия, чтобы переместить их за пределы веб-корня, чтобы они были доступны только через ваш скрипт, который сначала проверяет, прошел ли пользователь аутентификацию, а затем пропускает аватар, читая его. и вывод его. В качестве альтернативы вы можете защитить каталог с помощью файла htaccess, говорящего deny from all.

Кроме того, вы должны использовать HTTP_REFERER для безопасности либо через PHP, либо через .htaccess .

Удачи!

3 голосов
/ 26 октября 2009

Вы можете посмотреть «Предотвращение хотлинкинга» через htaccess, и я думаю, что это должно быть простое решение для нужного вам типа защиты. Однако это не является доказательством дурака, люди, которые действительно захотят получить эти изображения, найдут обходной путь, обманув реферрера.

http://altlab.com/htaccess_tutorial.html

2 голосов
/ 26 октября 2009

Вы правы, рассматривая вариант № 3. Используйте служебный скрипт, который будет проверять пользователя и readfile () изображение. Обязательно установите правильный HTTP-заголовок Content-Type с помощью функции header () перед отправкой изображения. Для лучшей изоляции изображения должны быть помещены над корневым веб-каталогом или защищены хорошо написанными правилами .htaccess - такой способ защиты файлов и / или каталогов определенно существует.

0 голосов
/ 26 октября 2009

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

В этом случае я бы рекомендовал какую-то аутентификацию. Вы должны создать PHP-скрипт, который будет обслуживать изображения только в том случае, если он проверяет зарегистрированного пользователя через COOKIES или SESSION. (Я бы не рекомендовал использовать md5 пароля пользователя).

Возможно, вам понадобится таблица SQL для сохранения прав доступа.

Да, и для защиты ваших изображений вы можете просто установить .htaccess с помощью

deny from all

в папку изображений.

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