Come abilitare tutti i metodi HTTP in un server HTTP Apache


16

Come posso abilitare la gestione di tutti i metodi HTTP come definito in RFC 2616 sul server web Apache? Questi sarebbero:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Sto usando Apache HTTP Server, versione 2.2.22 (Ubuntu)
Ecco il mio .htaccessfile:

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

Ecco l'output che ottengo eseguendo Telnet: non esiste un metodo 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.

Qualche idea su questo?


quale versione di apache usi?

Versione server: Apache / 2.2.22 (Ubuntu)

1
Stai limitando i metodi sulla /outputposizione, ma stai chiedendo OPTIONSla /posizione. I limiti del metodo non si applicano alle posizioni principali, ma solo a posizioni più profonde.
lanzz,

Risposte:


7

Apache implementa tutti i metodi HTTP rilevanti per il contenuto statico (file effettivi forniti direttamente da Apache). Per i contenuti dinamici (script CGI mod_php, ecc.), Apache non si preoccupa di quale sia il metodo HTTP (a meno che non sia esplicitamente limitato con una <Limit>direttiva ) e passa la richiesta al gestore appropriato così com'è. Lo script deve gestire il metodo specifico come previsto, non Apache. Anche i metodi non standard vengono passati ai gestori dinamici senza alcun problema.

Testato con una ASDFG / HTTP/1.1richiesta non valida gestita da uno mod_phpscript. Nessun reclamo da parte di Apache, ricevuto ASDFGnello $_SERVER['REQUEST_METHOD']script del gestore.


Grazie per la tua risposta. Ho modificato il mio file .htaccess per consentire alcuni metodi http. Ho controllato con OPTIONS / HTTP / 1.0 su telnet. I metodi http consentiti non sono mai cambiati. Questo problema non riguarda apache forse, ma è ancora un problema per me abilitare tutto il metodo http.

Probabilmente dovresti pubblicare esattamente quello che stai provando, quale risposta ti aspetti di vedere, cosa vedi invece e come gestisci quelle richieste sul lato server. Nulla dovrebbe fermare una OPTIONSrichiesta, a meno che tu non lo proibisca esplicitamente con <Limit OPTIONS> deny from all </Limit>o un controllo di accesso simile.
lanzz,

2

basato su http://httpd.apache.org/docs/current/mod/core.html , questi metodi possono essere modificati nei file di configurazione directorye .htaccessusando la Limit method [method] ... > ... </Limit>direttiva

Fondamentalmente devi commentare opzioni come quelle che seguono per bloccare i metodi.

<Limit POST PUT DELETE>
  Require valid-user
</Limit>


1

Il modo sicuro per risolvere questo problema è capire perché Apache rifiuta le richieste nel tuo caso particolare . Puoi impararlo dai log degli errori.

Nel mio caso, ho tail -f /usr/local/apache/logs/error_logdato questo:

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

Si parla di una regola di sicurezza e il file è venuta da: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. La modifica di quel file ha risolto il mio problema.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.