| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Администрирование Web серверов и Web служб > Apache запрет на картинку |
| Автор: Axotnik 31.3.2011, 12:52 |
| Добрый день, уважаемые! У меня в каталоге есть пхп-скрипт и картинка. Пхп-скрипт выводит картинку в браузер. Вопрос - как можно запретить прямой доступ к картинке с адресной строки браузера, но оставить возможность показывать картинку через пхп-скрипт? Пример: картинка - http://mysite.ru/img/img1.jpg ; пхп-скрипт - http://mysite.ru/img/my.php. Если перейти через http://mysite.ru/img/my.php, то картинка должна отображаться, если на прямую http://mysite.ru/img/img1.jpg то нет. Заранее благодарю. |
| Автор: Wolf1994 31.3.2011, 14:16 | ||||
| 1. Установить права на папку, не позволяющие обращаться к ней извне, но достаточные для доступа скриптом. 2. Скопировать в папку файл .htaccess с командами:
или:
|
| Автор: Axotnik 31.3.2011, 16:00 | ||
| А какие именно права нужны для папки? А когда создаю файл .htaccess, доступ к картинке запрещен, но она также не отображается и через скрипт.
|
| Автор: Wolf1994 31.3.2011, 16:26 | ||
| Точно не знаю, но, кажется, права на публичный доступ к файлу и на чтение его процессом Apache, запущенным с определёнными привилегиями, отличаются. Можно найти это отличие опытным путём. Верно: приведённый пример блокирует любой доступ к файлам по HTTP. Если нужно сделать так, чтобы при обращении к графическому файлу он передавался на обработку скрипту, то можно использовать такой .htaccess:
...Либо можно обращаться непосредственно к PHP скрипту, используя полную блокировку файлов с расширением "JPEG". В таком случае вышеприведённые примеры запрещения доступа по HTTP не повлияют на чтение файла скриптом. |
| Автор: Nigel 31.3.2011, 16:44 |
| Либо используйте механизм x-sendfile, тогда физическое расположение файлов может быть любым, либо делайте запрет как показали выше, читая саму картинку при этом php скриптом. |
| Автор: Axotnik 31.3.2011, 17:55 |
| а можно пример, а то что б не пробовал - все равно не отображается. |
| Автор: Wolf1994 31.3.2011, 18:31 |
| Скрипт не отображает картинку при запросе "http://mysite.ru/img/my.php", после добавления ".htaccess", но до этого этот же скрипт нормально её выводил? |
| Автор: Axotnik 1.4.2011, 09:42 |
| да. до этого норм. |
| Автор: Axotnik 1.4.2011, 10:53 |
| да |
| Автор: Wolf1994 1.4.2011, 11:00 | ||
| Понятно. В таком случае, вопрос может быть решён с помощью проверки источника обращения к файлу:
100% защиты это не даст, но задачу решит. |
| Автор: Axotnik 1.4.2011, 11:07 |
| задачу не решает. При обращении http://mysite.ru/img/img1.jpg к картинке картинка отображается. Через скрипт тоже отображается. |
| Автор: Wolf1994 1.4.2011, 13:29 | ||
Данные инструкции были помещены в пустой файл ".htaccess" в папке "img":
После чего через адресную строку браузера был запрошен файл "img/img1.jpg" и файл "img/my.php" и в обоих случаях картинка загрузилась? |
| Автор: Axotnik 1.4.2011, 14:04 |
| да |
| Автор: Wolf1994 1.4.2011, 15:51 |
| Ясно. Приведённый последним пример должен был заблокировать картинку при обращении не из скрипта "my.php". Видимо, где-то в данном коде допущена ошибка. Можете попробовать использовать этот подход: проверку на HTTP_REFERER для "JPEG" файлов и составить более корректный ".htaccess". |