Чтобы убедиться в отсутствии слабых мест в системе безопасности, которые можно использовать через .htaccess, как мы можем увидеть все возможные обработчики, которые Apache может использовать с помощью таких директив, как SetHanlder
и AddHandler
.
Я знаю, что могу найти некоторые, посмотрев на вывод mod_info или grepping через файлы conf (это был подход, который я нашел, пытаясь найти ответ на этот вопрос), но это не значит, что нет доступных обработчиков, которые не не в списке. Я предполагаю, что могу загрузить и просмотреть весь исходный код Apache и каждый загруженный модуль и посмотреть, что они регистрируют, но есть ли лучший способ?
Быстрое исправление - запретить AddHandler и SetHandler в .htaccess, но у этого есть свои недостатки. Например, в Drupal есть допустимый вариант использования директивы SetHandler, поскольку он использует ее как часть глубокой защиты для предотвращения запуска сценариев PHP, если кому-то каким-то образом удастся загрузить их на сайт через загрузчик файлов.
Вот несколько примеров того, о чем я говорю:
AddHandler server-parsed .shtml
SetHandler server-info
AddHandler application/x-httpd-php5 .php
Вот пример использования Drupal с сайтов / default / files / .htaccess, если кому-то интересно:
# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
# Override the handler again if we're run later in the evaluation list.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>
РЕДАКТИРОВАТЬ 30 июля 2015 г .: Это не исчерпывающий ответ, но, если он кому-то поможет, я нашел несколько обработчиков, перечисленных в верхней части http://httpd.apache.org/docs/2.4/handler.html а также прочтите, что пользовательские обработчики могут быть созданы директивой Action (см. http://httpd.apache.org/docs/2.4/mod/mod_actions.html#action).
ИЗМЕНИТЬ 1 сентября 2015 г .: Интересно, есть ли способ сбросить память процесса httpd и найти там имена обработчиков. Я пробовал это с помощью gcore, но безуспешно (хотя я никогда не использовал это раньше и получал предупреждение при этом, поэтому я не уверен, что я делаю что-то не так).
Я почти уверен, что не существует уже реализованного способа вернуть список существующих действий, скриптов и т. Д., С которыми ваш обработчик мог бы отображать запросы.
Возможно, можно было бы написать модуль apache, который мог бы возвращать такую информацию, но потребуется немного изучить код apache, чтобы даже понять, что там возможно.
Невозможно, извините. Согласно моему заявлению на Руководство по модулям Apache:
Таким образом, сам сервер не предполагает знать, какой модуль отвечает за обработку определенного запроса, и будет спрашивать каждый модуль, заинтересованы ли они в данном запросе или нет. Затем каждый модуль должен либо осторожно отклонить обслуживание запроса, либо принять его обслуживание, либо категорически отклонить запрос от обслуживания, как это делают модули аутентификации / авторизации.
Все это обрабатывается во время запроса, в соответствии с дизайном, поэтому вы не можете перемещаться по модулям или иным образом выяснять это. Вы должны прочитать исходный код каждого модуля, чтобы узнать об именах их обработчиков.
Лучше всего создать модуль самостоятельно, который проверяет обработчик, установленный в данный момент для запроса, по набору принятых имён обработчиков и изменяет его на значение по умолчанию, если он отсутствует в списке.