Назад | Перейти на главную страницу

filesmatch, вызывающий загрузку php без анализа

Задний план

В соответствии с рекомендацией статьи о лучших практиках безопасности загрузки в моем файле htaccess есть следующий фрагмент:

ForceType application/octet-stream
<FilesMatch "(?i).jpe?g$">
    ForceType image/jpeg
</FilesMatch>
<FilesMatch "(?i).gif$">
    ForceType image/gif
</FilesMatch>
<FilesMatch "(?i).png$">
    ForceType image/png
</FilesMatch>
<FilesMatch "(?i).css$">
    ForceType text/css
</FilesMatch>

Это должно помешать людям скрывать php-код в изображениях и т. Д., Хотя, боюсь, я не могу найти источник этого фрагмента, несмотря на поиск в моей истории, это было некоторое время назад

Эта проблема

Это работало, как и ожидалось, на моем локальном сервере разработки (XAMPP), но теперь я начал настраивать на производственном сервере этот фрагмент, похоже, заставляет файлы PHP загружаться, а не запускаться

Поскольку система использует htaccess для маршрутизации всех файлов через public / index.php, добавление новой директивы для .php не сработало:

<FilesMatch "(?i).php$">
    ForceType application/x-httpd-php
</FilesMatch>

Кажется, я нашел способ остановить это - я ищу способ предотвратить совпадение файлов, обрабатывая php как поток октетов (и, таким образом, скачивая его) или альтернативный способ предотвратить запуск скриптов, маскирующихся под изображения

заранее спасибо

<FilesMatch "(?i).php$">
    ForceType application/x-httpd-php
</FilesMatch>

Вместо этого попробуйте ForceType None чтобы вернуться к обычным ассоциациям типа пантомимы. Например:

<FilesMatch "(?i)\.php$">
    ForceType None
</FilesMatch>

Обратите внимание, что вы также должны избегать точки в регулярном выражении, чтобы соответствовать буквальной точке, а не любой персонаж. (Это касается всех ваших FilesMatch контейнеры тоже.)


Ваша первоначальная «проблема» - это, очевидно, ваша первая строка: ForceType application/octet-stream. Раскрытие исходного кода PHP само по себе представляет угрозу безопасности, поэтому я не могу не сомневаться в достоверности этого кода? Тот факт, что это «сработало» на вашем локальном сервере, вероятно, зависит только от способа установки PHP (модуль, CGI / FastCGI и т. Д.).

Я не специалист по безопасности, но я не понимаю, что это должно делать на уже правильно настроенном сервере?