На моем веб-сайте я храню фотографии пользователей простым способом, например: «image / user_1.jpg».
Я не хочу, чтобы посетители могли просматривать изображения на моем сервере, просто пытаясь user_ids. (Например: www.mydomain.com/images/user_2.jpg, www.mydomain.com/images/user_3.jpg, так далее …)
Пока у меня есть три решения:
Я пытался использовать .htaccess для защиты паролем папки «images». Это помогло мне до некоторой степени, но некоторые из изображений начали вызывать запрос имени пользователя и пароля на моем htmls (хотя, как ни удивительно, некоторые изображения не отображались), поэтому это кажется непредсказуемым методом.
Я могу начать конвертировать мой user_id в хеш-файл md5 с некоторой солью. Изображения будут называться как: /image/user_e4d909c290d0fb1ca068ffaddf22cbd0.jpg. Мне не нравится это решение. Это затрудняет файловую систему.
или я могу использовать функцию 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, и я думаю, что это должно быть простое решение для типа защиты, в которой вы нуждаетесь. Однако его не дурацкое доказательство, люди, которые действительно захотят получить эти образы, найдут работу, фальсифицируя реферера.
Как уже говорилось, защита hotlinking не защищает ваши файлы от листинга, просто изменяя их идентификатор. Плюс Refferer можно легко подделать.
В этом случае я бы рекомендовал некоторую аутентификацию. Вы должны создать PHP-скрипт, который будет показывать изображения только в том случае, если он проверяет зарегистрированного пользователя через COOKIES или SESSION. (Я бы не рекомендовал использовать md5 пароля пользователя).
Возможно, вам понадобится таблица SQL для сохранения прав доступа.
О, и для защиты ваших изображений вы можете просто разместить .htaccess с помощью
deny from all
в папку с изображениями.