Apache HTTPサーバーですべてのHTTPメソッドを有効にする方法


16

Apache WebサーバーでRFC 2616で定義されているすべてのHTTPメソッドの処理を有効にするにはどうすればよいですか?これらは次のとおりです。

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.

これについて何か考えはありますか?


どのバージョンのApacheを使用していますか?

サーバーバージョン:Apache / 2.2.22(Ubuntu)

1
その/output場所でメソッドを制限していますが、その場所で要求しOPTIONSてい/ます。メソッドの制限は親の場所には適用されず、より深い場所にのみ適用されます。
lanzz

回答:


7

Apacheは、静的コンテンツ(Apacheによって直接提供される実際のファイル)に関連するすべてのHTTPメソッドを実装します。動的コンテンツ(CGIスクリプトmod_phpなど)の場合、ApacheはHTTPメソッドが何であるかを気にせず(<Limit>ディレクティブで明示的に制限されていない限り)、要求をそのまま適切なハンドラーに渡します。スクリプトは、Apacheではなく、特定のメソッドを意図したとおりに処理する必要があります。非標準のメソッドでさえ、問題なく動的ハンドラーに渡されます。

スクリプトASDFG / HTTP/1.1によって処理された無効なリクエストでテストされましたmod_php。ハンドラスクリプトで受け取っASDFGたApacheからの苦情はありません$_SERVER['REQUEST_METHOD']


ご回答有難うございます。.htaccessファイルを編集して、いくつかのhttpメソッドを許可しました。telnet経由でOPTIONS / HTTP / 1.0で確認しました。許可されるHTTPメソッドは変更されません。この問題はApacheに関するものではないかもしれませんが、すべてのhttpメソッドを有効にすることはまだ問題です。

おそらく、あなたがしようとしていること、あなたが期待している応答、あなたが見ているもの、そしてそれらのリクエストをサーバー側でどのように処理するかを正確に投稿すべきです。OPTIONSリクエストを明示的に禁止し<Limit OPTIONS> deny from all </Limit>たり、同様のアクセス制御を行ったりしない限り、リクエストを止めることはできません。
lanzz

2

http://httpd.apache.org/docs/current/mod/core.htmlに基づいて、これらのメソッドはディレクティブを使用してdirectoryおよび .htaccess設定ファイルで変更できますLimit method [method] ... > ... </Limit>

基本的に、メソッドをブロックするために使用される以下のようなオプションをコメントアウトする必要があります。

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


1

これを修正する確実な方法は、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。そのファイルを編集して問題を解決しました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.