Отключите PHP в каталоге (включая все подкаталоги) с .htaccess

Я действительно не использовал направляющие очень, но я думал бы, что эти автоматизированные тесты будут полезны как испытания с помощью дыма, чтобы быть уверенными, что вещь, которую Вы просто сделали, не повреждает что-то, что Вы сделали на прошлой неделе. Это станет все больше важным, когда Ваш проект растет.

кроме того, пишущий тесты перед написанием кода (использующий модель Test-Driven-Development) поможет Вам написать код лучше и быстрее, так как тесты вынуждают Вас полностью продумать проблему. Это также поможет Вам знать, где разбить сложные методы в меньшие методы, которые можно протестировать индивидуально.

Вы правы, писание и поддержание тестов занимают много времени. Иногда больше времени, чем сам код. Однако это может сэкономить Вам время в устранении ошибки и осуществляющий рефакторинг по причинам выше.

63
задан Tor Valamo 14 December 2009 в 02:26
поделиться

5 ответов

Попробуйте отключить опцию engine в вашем файле .htaccess:

php_flag engine off
115
ответ дан 24 November 2019 в 16:06
поделиться

Отключить весь доступ к поддиректориям (самый безопасный) используйте:

<Directory full-path-to/USERS>
     Order Deny,Allow
     Deny from All
 </Directory>

Если вы хотите заблокировать прямое обслуживание только файлов PHP, выполните:

1 - Убедитесь, что вы знаете, какие расширения файлов сервер распознает как PHP (и не позволяйте людям переопределять их в htaccess). Один из моих серверов настроен на:

# Example of existing recognized extenstions:
AddType application/x-httpd-php .php .phtml .php3

2 - В зависимости от расширений добавить регулярное выражение в FilesMatch (или LocationMatch)

 <Directory full-path-to/USERS>
     <FilesMatch "(?i)\.(php|php3?|phtml)$">
            Order Deny,Allow
            Deny from All
    </FilesMatch>
 </Directory>

Или использовать Location для сопоставления файлов php (я предпочитаю подход с файлами выше )

<LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$">
     Order Deny,Allow
     Deny from All
</LocationMatch>
48
ответ дан 24 November 2019 в 16:06
поделиться

Если вы используете mod_php, вы можете поместить (либо в .htaccess в / USERS, либо в свой httpd.conf для каталога USERS)

RemoveHandler .php

или

RemoveType .php

(в зависимости от включен ли PHP с помощью AddHandler или AddType)

Файлы PHP, запущенные из другого каталога, по-прежнему смогут включать файлы в / USERS (при условии, что нет ограничений open_basedir), потому что это не проходит через Apache. Если доступ к php-файлу осуществляется с помощью apache, он будет обрабатываться как обычный текст.

Править

Решение Ланса Рашинга, заключающееся в отказе в доступе к файлам, вероятно, лучше

13
ответ дан 24 November 2019 в 16:06
поделиться

Это может быть излишним, но будьте осторожны, делая все, что полагается на расширение файлов PHP - .php - что, если кто-то придет позже и добавит обработчики для .php4 или даже .html , чтобы они обрабатывались PHP. Возможно, вам будет лучше обслуживать файлы из этих каталогов из другого экземпляра Apache или чего-то еще, что обслуживает только статический контент.

1
ответ дан 24 November 2019 в 16:06
поделиться

Это отобразит исходный код вместо его выполнения:

<VirtualHost *>
    ServerName sourcecode.testserver.me
    DocumentRoot /var/www/example
    AddType text/plain php
</VirtualHost>

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

ПРЕДУПРЕЖДЕНИЕ! :

Как недавно указал Дэн, этот метод никогда не следует использовать в производственной среде. Следуйте принятому ответу, так как он блокирует любую попытку выполнить или отобразить файлы php.

Если вы хотите, чтобы пользователи обменивались файлами php (и позволяли другим показывать исходный код), есть более эффективные способы сделать это, например git, wiki и т. Д.

Этого метода следует избегать! (Вас предупредили. Оставил здесь в образовательных целях)

10
ответ дан 24 November 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: