Для безопасности я перемещаю коллекцию файлов и папок вне корневого веб-сервера на сервере apache, а затем я буду обслуживать их динамически. Это кажется лучше, чем 2 альтернативы:
Таким образом, мы вернулись к тому, чтобы иметь их вне корня сети, но обслуживать их динамически. Проблема, с которой я столкнулась, – это разные типы файлов (php-скрипты, txt, pdf, jpg). Я не уверен, следует ли использовать include()
или readfile()
. И у меня возникают проблемы с отправкой соответствующих заголовков для каждого файла, чтобы браузер отображал их правильно.
Я пропустил еще одно волшебное решение? Есть ли какая-то инфраструктура, которая ускользает от меня, которая обрабатывает подачу динамических файлов и заголовков?
(FYI Я использую Linux, Apache и PHP на общем хосте)
Я думаю, что что-то вроде этого будет работать:
<?php $path = realpath(dirname(__FILE__) . '/../my_files/' . $_GET['file']); $parts = explode('/', pathinfo($path, PATHINFO_DIRNAME)); if (end($parts) !== 'my_files') { // LFI attempt exit(); } if (!is_file($path)) { // file does not exist exit(); } header('Content-Type: ' . mime_content_type($path)); header('Content-Length: ' . filesize($path)); readfile($path);
Самый простой способ, о котором я могу думать, – использовать файлы .htaccess. Предполагая, что ваш веб-сервер Apache, конечно.
Вы можете запретить доступ к любым типам файлов и / или каталогов для всех и разрешить только для localhost. Таким образом, они не будут доступны общественности, даже если они знают правильный путь / URL, но сервер и PHP смогут их обслуживать.
Для разных веб-серверов должны быть эквивалентные решения. Кроме того, вы всегда можете переключиться на Apache 🙂