[PHP-users 1059] Re: 特定ファイル/ディレクトリへのアクセス拒否

Yasuo Ohgaki php-users@php.gr.jp
Fri, 3 Aug 2001 13:41:34 +0900


大垣です。

> ところで、
>    http://www.zend.com/codex.php?id=626&single=1
> のコードを見たのですが、 md5 に渡す値は HTTP_*_VARS の
> キーと値を連結した文字列を渡すので、うちの環境では
> 次の3つの例はどれも check_user_vars を通り抜けてしまいます。
> # うちの環境、に限定したのは PHP で連想配列の順番がどうやって処理
> # されているかわからないから。
>
>
sample.php?variable1=value1&variable2=value2&md5sum=0854079e1a6df08acd
484ef65ca022d0
>
sample.php?var=iable1value1&variable2=value2&md5sum=0854079e1a6df08acd
484ef65ca022d0
>
sample.php?v=a&r=iable1value1variable2value2&md5sum=0854079e1a6df08acd
484ef65ca022d0

Feedbackありがとうございます。
私が本当に使っているコードはユーザーから送信される変数名をチェックして
いたので、codexのコードだけで不十分です(でした)説明書きと一致してい
なくて、申し訳ないです。

> これは $q .= $k.$user_vars[$k].MAGIC のようにして、ある程度解決でき
そう。

ちょっと前に、このように変更しました。
このまま使ってしまうとセキュリティー上問題があるので、私が実際に利用し
ている方法の一つももexample付け加えておきました。もし、本格的に利用す
るのであれば関数を多少変更して、同じような方法で利用されることをお勧め
します。

# 私の場合、ページへのアクセス権限の仕組みが比較的複雑だった
# ため権限DBのLook Up、検索パラメータの再チェック等の削除が出
# 来た為、システムへの負荷がかなり減らす事ができました。

> それと、連想配列の並び順に手をつけずに連結していますが、
> $HTTP_*_VARS の値が常にソートされる、という保証が無いなら
> ksort を適用させた上で連結したほうが良いと思います。

PHPはGET,POSTの値を前から順番に初期化するのでこれに依存しています。サ
ンプルコードとしては十分と思ったのですが、不親切なのでHTTP_*_VARSから
チェックする変数を$keysとして渡せる様に変更しておきました。

今の関数だと、MAGIC文字列の設定変更、ユーザー固有の識別子を付け加える
と安全に利用できると思います。

--
Ohgaki, Yasuo (大垣 靖男) 
Mail: yohgaki@dd.iij4u.or.jp