記事本文
また記事を塩漬けに……
Template hxxks ! - 実はの時と同じ轍を踏んでいますが、書こう書こうと思って忘れていた記事をサルベージ。 下書き状態の投稿日を見ると 11 月 23 日……。 次項の冒頭に今さら感が漂っていますが、そこは気にせず読み進めてください。 ちなみに void GraphicWizardsLair( void ); // - gekka blog: mt.cfg丸見え!で記憶が蘇りました。
mt.cfg の保護 ?
Limit ディレクティブに関するメモを書く際に調べていて初めて気付いたのですが、
Movable Typeをcgi-binディレクトリから実行していない場合は、Movable Typeのインストール先ディレクトリにある.htaccessファイルに以下の数行を加えて、mt.cfgファイルを保護することを推奨します。
<Files mt.cfg> <Limit GET> deny from all </Limit> </Files>
普通に <Limit GET> を使っていますね……。
要するにブラウザからのアクセス ( GET メソッドによるリクエスト ) を防ぎ、 mt.cfg を保護しようということなのでしょう。
しかし、これは <Limit> の危険 - <Limit GET> の突破にある通り、例えば POST メソッドでのリクエストをブラウザから送れば突破されてしまいます。
( この場合は Apache 2 を使用している場合に限りますが……。 )
Apache 1.3 なら安心なのか ?
前項で、 Apache 2 を使用している場合に限り、 POST メソッドでのリクエストをブラウザから送れば突破できると書きましたが、じゃあ Apache 1.3 などなら大丈夫なのか ?
上で見たように、<Limit GET> は POST メソッドを使って制限をかいくぐられることがあるので不十分である。 ならば <Limit GET POST> ならばどうか。 これならば POST も制限される。
やはり、NO である。 GET でも POST でもないメソッドでアクセス可能な方法があるのだ。 しかも、先の例は Apache2 限定だが、ここで述べる方法は 1.3 でも有効である。
Apache 1.3 だったら <Limit GET> でも問題は無い、というわけではありません。
xxx などという得体のしれないメソッドを使ったリクエストでも、GET と同じ結果が返ってくる。 もちろん、アクセス制限を <Limit GET> で囲んだ場合には意味がない。 <Limit GET POST> としても防げない。 xxx というメソッドへの制限を追加してはじめて制限できる。 が、xxx を追加しても、今度は ZZZ というメソッドでアクセスされたら終わりだ。 つまり、<Limit> では防げない。
GET を制限しようと POST を 制限しようと、 xxx とか COSME とか GGG とか、適当なメソッドによるリクエストが有効なら、 <Limit ***> という指定をせず、全て deny from all としてしまえばいいのです。
<Files mt.cfg>
deny from all
</Files>
これだけ。
何故マニュアルでは Limit ディレクティブを使っているのか ?
mt.cfgが丸見えというのも問題だけど、この間違った保護方法のサンプルも問題だよな。 <Limit GET>しちゃうと、POSTリクエストすれば見えちゃうじゃん。 なんで<Limit GET>なんてつけるんだ? [関連URL]
マニュアル作成者に聞かないと分からないので憶測になりますが、 RTFM の可能性が考えられます。 マニュアル自身が RTFM では何を信じればいいのか、という点はさておき。
アクセス制御は、通常全てのアクセスメソッドに対して影響し、普通はこれが望ましい挙動です。 そうしたことから、大部分の場合にはアクセス制御に関わるディレクティブを
<Limit>セクション内に書くべきではありません。

