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

На моем веб-сайте я храню фотографии пользователей простым способом, например: «image / 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. или я могу использовать функцию readfile () для PHP PHP или, возможно, что-то подобное в Perl или Python. Например, я могу передать пароль, используя строку md5, чтобы проверять посетителей как пользователей, имеющих доступ к этому изображению.

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

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

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

Haluk

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

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

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

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

Удачи!

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

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

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

http://altlab.com/htaccess_tutorial.html

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

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

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

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

 deny from all 

в папку с изображениями.