Способ № 1 нежизнеспособен, так как он запрашивает имя пользователя и пароль на каждом запрашиваемом изображении. Вы, вероятно, получили запрос для некоторых изображений, а не для других из-за проблем с кэшированием.
Метод №2 выглядит наиболее привлекательным для меня, поскольку он потребляет меньше ресурсов процессора, но с помощью только user_id, переданного через функцию md5, имя файла все еще довольно легко угадать. Вы должны пойти на md5 («моя секретная строка». $ User_id) для лучшего решения.
Почему вы выбираете # 3 через Perl или Python? Что не так со скоростью PHP? В самом деле, если вы защищаете свои изображения таким образом, вам следует приложить дополнительные усилия, чтобы переместить их за пределы веб-корня, чтобы они были доступны только через ваш скрипт, который сначала проверяет, прошел ли пользователь аутентификацию, а затем пропускает аватар, читая его. и вывод его. В качестве альтернативы вы можете защитить каталог с помощью файла htaccess, говорящего deny from all
.
Кроме того, вы должны использовать HTTP_REFERER для безопасности либо через PHP, либо через .htaccess .
Удачи!