TomcatでHTTPメソッドを制限する設定方法
忘れがちになるので、自分用にメモ。
TomcatでHTTPメソッドを制限する設定方法は以下の通り。
$CATALINA_HOME/conf/web.xml に以下の設定を入れる。
<security-constraint> <web-resource-collection> <web-resource-name>hoge</web-resource-name> <url-pattern>/*</url-pattern> <http-method>HEAD</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> <http-method>CONNECT</http-method> <http-method>PATCH</http-method> <http-method>PROPFIND</http-method> <http-method>PROPPATCH</http-method> <http-method>MKCOL</http-method> <http-method>COPY</http-method> <http-method>MOVE</http-method> <http-method>LOCK</http-method> <http-method>UNLOCK</http-method> </web-resource-collection> <auth-constraint/> </security-constraint>
上記設定により拒否された場合は403 Forbiddenが返されるようになる。
なお、Tomcat 6.0.29で試したところデフォルトで許可されている(HTTPステータスコード200が返される)メソッドはGET、HEAD、POST、OPTIONS。PUT、DELETEは403 Forbidden、TRACEは405 Method Not Allowed、CONNECT、PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCKは501 Not Implementedが返される。ただ、OPTIOSを実行すると、
Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS
と返されるので、PUT、DELETEも許可されているのかも。実験方法が
PUT / HTTP/1.0
というようなリクエストなのでリクエスト方法の問題かもしれない。
これらを考慮すると、上記設定もTRACE以下は不要ともいえる。
ちなみに、TRACEメソッドを有効にしたい場合は、server.xmlの
あと、Tomcat 7.0.4で試してみると、よくわからないことになった。
TRACEで405 Method Not Allowedが返されるのは同じだが、他はなんでも200が返ってくる模様。CONNECT、PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCKどころか、
A / HTTP/1.0
とか
XXX / HTTP/1.0
とかやっても200が返ってくる。というわけで、Tomcat 7の場合、上記のようにブラックリスト方式では完全には制限できないのかも。