Как включить все методы HTTP на HTTP-сервере Apache
Как я могу включить обработку всех методов HTTP, как определено в RFC 2616 на веб-сервере Apache? Это будет:
OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Я использую Apache HTTP Server, версия 2.2.22 (Ubuntu)
Вот мой .htaccess
Файл:
<Location /output>
Dav On
<LimitExcept GET HEAD OPTIONS PUT>
Allow from all
</LimitExcept>
</Location>
Вот вывод, который я получаю от запуска Telnet - Нет метода PUT:
Escape character is '^]'.
OPTIONS / HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html
Connection closed by foreign host.
Есть мысли по этому поводу?
6 ответов
Apache реализует все соответствующие методы HTTP для статического содержимого (реальные файлы, обслуживаемые непосредственно Apache). Для динамического контента (CGI-скрипты, mod_php
и т. д.), Apache не волнует, что такое HTTP-метод (если он явно не ограничен <Limit>
директива) и передает запрос соответствующему обработчику как есть. Ваш сценарий должен обрабатывать определенный метод, как предполагалось, а не Apache. Даже нестандартные методы передаются динамическим обработчикам без проблем.
Проверено с недействительным ASDFG / HTTP/1.1
запрос обрабатывается mod_php
скрипт. Нет жалоб от Apache, получено ASDFG
в $_SERVER['REQUEST_METHOD']
в скрипте обработчика.
На основе http://httpd.apache.org/docs/current/mod/core.html эти методы могут быть изменены в directory
а также .htaccess
файлы конфигурации с использованием Limit method [method] ... > ... </Limit>
директива
В основном вы должны закомментировать параметры, подобные тем, которые приведены ниже, которые используются для блокировки методов.
<Limit POST PUT DELETE>
Require valid-user
</Limit>
Возможно, вы используете libapache2-mod-php5filter вместо libapache2-mod-php5.
Верный способ исправить это - узнать, почему Apache отклоняет запросы в вашем конкретном случае. Вы можете узнать это из журналов ошибок.
В моем случае, tail -f /usr/local/apache/logs/error_log
дал это:
[Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576]
[client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2).
Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD"
required. [file "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [line
"32"] [id "960032"] [msg "Method is not allowed by policy"] [severity
"CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"]
[uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"]
Он упоминает правило безопасности и файл, из которого он исходит: /usr/local/apache/conf/modsec-imh/01_base_rules.conf
, Редактирование этого файла решило мою проблему.
Я должен предложить людям отметить или изменить IP-адрес, который вы публикуете. Это только дает хакерам надежную цель, к которой можно стремиться. Будьте осторожны с тем, что вы публикуете.
Документ PHP имеет раздел ссылок для этого http://php.net/manual/en/features.file-upload.put-method.php
Основная документация Apache для директивы находится по адресу http://httpd.apache.org/docs/2.2/mod/mod_actions.html