В соответствии с рекомендацией статьи о лучших практиках безопасности загрузки в моем файле 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 и т. Д.).
Я не специалист по безопасности, но я не понимаю, что это должно делать на уже правильно настроенном сервере?