Categories: WebTechinical

許可だか拒否だか allow,deny

Apacheのアクセス制限設定の基本ではあるが、なんだか考え出すとわかんなくなっちゃう人が多い。自分もそうだったので整理。

  • Order allow, deny
  • Allow from all
  • Deny from xxxxx

というパターンが割と一般的だが、これは

  • Order deny,allow
  • Deny from xxxxx

と書く場合もある。(Apacheのデフォルトは deny, allow みたいなのでこっちが普通?)

この2つが同じだよって言われると、「え?なんで?」って事なってくる。

誤解ポイントは2つ

  1. Order A,B を、 Aを評価した後に、Aでなかったものに対してBを評価すると考えてしまう。
  2. Allow, Deny の記述上の順番に意味があると思ってしまう。

例えば、一番失敗しそうな勘違いは、

  • Order deny,allow
  • Deny from xxxxx
  • Allow from all

これだと、xxxxx が、Denyで弾かれて、その他は、Allow from all で許可されるような印象を持つけど、実際は、こんな記述をしたらオール通し!になってしまう。

これでダメなら、次のはどうか!ってやってみる人もいるかもしれない。

  • Order deny,allow
  • Allow from all
  • Deny from xxxxx

Allow from all で全許可しておいて、後ろのDenyで、xxxxx だけ拒否! しかし、残念ながら、Order の事忘れちゃってますよね。記述上 Deny をAllowの前に書こうが、後ろに書こうが関係ないわけです。

    これらがうまくいかない理由は次の通り

    1. Order A,B は、 Aを評価した後に、Aだったものに対して、Bを評価する
    2. Allow, Deny の記述上の順番には意味なんかない

    つまり上の間違い例だと、 最初に deny を評価するので、 xxxxx が一旦 deny になり、それ以外は、allow になる。この allow になったものは、それ以上チェックされないので、許可。 deny になったものは、更に Allow リストでチェックされるのだが、Allow from all なので、結局 allow になってしまう。で、xxxxx も許可。 ということになってしまうわけです。

    from all という記述がよく見られるのは、「とりあえず全部許可」とか「とりあえず全部拒否」みたいな意思を明確にする意図があって、フィルタ設定では、そういう明示的な設定が推奨されるからだと思いますが、Apache の Order 設定だと、処理的には、「とりあえず全部許可、だけど、やっぱ xxxxx はダメ」みたいな感じで、処理的にはややこしくなってしまう。日本はOKだけと、北海道はダメみたいな設定をしたい場合には必須の設定なんだけど、私的には、from all を使うより、Order をヒックリ返して Deny だけ書くとか Allow だけ書く方がわかりやすいような気もします。

    正しくはありませんが、とりあえず、「Order deny, allow」を、「deny でなければ、allow(なのでDenyだけ書けば良い)」と読んでしまうのも手かもしれませんね。

    はじめ

    Share
    Published by
    はじめ

    Recent Posts

    トルコ旅行で考えた、日本のこれから

    先日のトルコ旅行で、いろいろ感…

    1週間 ago

    新千歳空港の駐車場なら、ココ!

    https://www.hok…

    1週間 ago

    トルコ旅行Tipsまとめ(実体験から)

    ネットで調べても分かりにくい、…

    2週間 ago

    株式投資は“余剰資金”で──その言葉の本当の意味を考える

    はじめに:「余剰資金で投資しま…

    2か月 ago

    利確したくなるときこそ、自分の目的を見直すタイミング

    投資とは「稼ぐ力」を育て、社会…

    3か月 ago