- PR -

apacheのHTTPメソッドの制限方法について

1
投稿者投稿内容
dogx
常連さん
会議室デビュー日: 2002/10/10
投稿数: 44
投稿日時: 2008-08-05 17:46
apache(httpd-2.0.52)でバーチャルホストを設定し
HTTPのメソッドをGET、POST、OPTIONSのみに制限したく
以下の様に設定しました

<VirtualHost xxx.xxx.xxx.xxx>
DocumentRoot /home/hogehoge/html
<Directory /home/hogehoge/html>
<LimitExcept GET POST OPTIONS>
order deny,allow
Deny from all
</LimitExcept>
</Directory>
</VirtualHost>

その後 telnet にて

telnet xxx.xxx.xxx.xxx 80 で

OPTIONS * HTTP/1.0(Enter)
(Enter)

とすると以下の様なレスポンスが返って来ました

HTTP/1.1 200 OK
Date: Tue, 05 Aug 2008 08:30:27 GMT
Server: Apache
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Connection: close
Content-Type: text/plain

apacheのhttpd.confにてGET、POST、OPTIONSメソッド以外を許可しない様な
設定にしてある(と思っているのですが)にも関わらず
Allow: GET,HEAD,POST,OPTIONS,TRACE
となるのは何故なのでしょうか?
自分としては
Allow: GET,POST,OPTIONS
となるのではないかと思うのですが・・・
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2008-08-05 18:01
推測ですみませんが

http://httpd.apache.org/docs/2.0/ja/mod/core.html
上記の説明を見た限りでは、LimitディレクティブでTRACEメソッドに制限をかけられないと記載してありますので、
おそらく、LimitExceptでも制限がかからないのではないでしょうか?

あと、LimitディレクティブでGETを制限した場合にHEADも制限されると記載されていますので、おそらくLimitExceptで
GETを有効にした場合はHEADも有効になるのでないでしょうか
(試しにGETを無効にして、HEADも無効になるか確認してみてはどうでしょうか)

dogx
常連さん
会議室デビュー日: 2002/10/10
投稿数: 44
投稿日時: 2008-08-05 18:31
ゆうじゅんさんありがとうございます

試しにGETを無効にしPOSTとOPTIONSのみ有効にし
telnet でOPTIONSメソッドにて確認してみたところ

Allow: GET,HEAD,POST,OPTIONS,TRACE

となって変わりありませんでした
ただ、telnetでGETメソッドを試してみたところGETメソッド自体は
使用出来ないというか404エラーが返って来ました。
OPTIONSも無効にしてみたらOPTIONSメソッドも使用出来なくなりました
ので制限自体は効いているようです。
OPTIONSメソッドで返って来るAllowは実際に使用できるメソッドでは無い
と言う事みたいですね。
それならPUTやDELETEメソッドは出てこないのは何故なんでしょうね。
標準で無効だからでしょうかね。

実は今回の疑問の始まりは外部の第三者からOPTIONSメソッドによるアクセスが
あったのであまり気持ちの良いものではなかったためOPTIONSメソッドを
無効にしたいという事から沸いた疑問でした

ゆうじゅんさんどうもありがとうございました
1

スキルアップ/キャリアアップ(JOB@IT)