So aktivieren Sie alle HTTP-Methoden in einem Apache HTTP-Server

16

Wie kann ich die Behandlung aller in RFC 2616 definierten HTTP-Methoden auf dem Apache-Webserver aktivieren? Dies wären:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Ich benutze den Apache HTTP Server, Version 2.2.22 (Ubuntu)
Hier ist meine .htaccessDatei:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>

Hier ist die Ausgabe, die ich vom Ausführen von Telnet bekomme - Es gibt keine PUT-Methode:

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.

Irgendwelche Gedanken dazu?


quelle
welche version von apache benutzt du
Serverversion: Apache / 2.2.22 (Ubuntu)
1
Sie beschränken die Methoden für den /outputStandort, fragen jedoch nach OPTIONSdem /Standort. Methodenbeschränkungen gelten nicht für übergeordnete Standorte, sondern nur für tiefere Standorte.
Lanzz

Antworten:

7

Apache implementiert alle relevanten HTTP-Methoden für statischen Inhalt (tatsächliche Dateien, die direkt von Apache bereitgestellt werden). Bei dynamischen Inhalten (CGI-Skripten mod_phpusw.) ist es Apache egal, um welche HTTP-Methode es sich handelt (es sei denn, sie ist ausdrücklich auf eine <Limit>Direktive beschränkt ), und die Anforderung wird unverändert an den entsprechenden Handler weitergeleitet. Ihr Skript muss die bestimmte Methode wie vorgesehen behandeln, nicht Apache. Selbst nicht standardisierte Methoden werden problemlos an dynamische Handler übergeben.

Getestet mit einer ungültigen ASDFG / HTTP/1.1Anforderung, die von einem mod_phpSkript verarbeitet wurde. Keine Beschwerde von Apache, die ASDFGim $_SERVER['REQUEST_METHOD']Handler-Skript eingegangen ist .

lanzz
quelle
Danke für deine Antwort. Ich habe meine .htaccess-Datei bearbeitet, um einige http-Methoden zuzulassen. Ich habe mit OPTIONS / HTTP / 1.0 über Telnet nachgesehen. Zulässige http-Methoden wurden nie geändert. Bei diesem Problem geht es vielleicht nicht um Apache, aber es ist immer noch ein Problem für mich, alle http-Methoden zu aktivieren.
Sie sollten wahrscheinlich genau angeben, was Sie versuchen, welche Antwort Sie erwarten, was Sie stattdessen sehen und wie Sie mit diesen Anforderungen auf der Serverseite umgehen. Nichts sollte eine OPTIONSAnfrage stoppen , es sei denn, Sie verbieten es ausdrücklich mit <Limit OPTIONS> deny from all </Limit>oder einer ähnlichen Zugangskontrolle.
Lanzz
2

Basierend auf http://httpd.apache.org/docs/current/mod/core.html können diese Methoden in den Konfigurationsdateien directoryund .htaccessmithilfe der Limit method [method] ... > ... </Limit>Direktive geändert werden

Grundsätzlich müssen Sie kommentieren Sie Optionen wie die , die unterhalb derer verwendet , um die Methoden zu blockieren.

<Limit POST PUT DELETE>
  Require valid-user
</Limit>
MaVRoSCy
quelle
1

Der sichere Weg, dies zu beheben, besteht darin, herauszufinden, warum Apache die Anforderungen in Ihrem speziellen Fall ablehnt . Sie können dies aus Fehlerprotokollen lernen.

In meinem Fall tail -f /usr/local/apache/logs/error_loggab dies:

[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"]

Er erwähnt eine Sicherheitsregel und die Datei es herkommt: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. Das Bearbeiten dieser Datei löste mein Problem.

Anton Khamets
quelle