konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


セキュリティ指針

入力値のチェック

説明

入力値が、「数値であるか、文字列であるか、または電話番号であるか」など「ユーザ側からの入力値が想定内のものであるか」を確認することは非常に重要である。 正しい値以外の入力値を許容した場合に時としても思わぬ動作を許容してしまうことになる問題がある。

この問題に対応するには、「入力値は一括して同じ場所で確認」することが重要となる。

被害例

SELECTBOXで選択する項目で、管理者は1〜5までを選択でき、一般ユーザは1〜3までの項目しか選択できないよう設定されていたとする。 ここでユーザ側の項目を5と書き換えて入力した場合に、本来は入力値のチェックではじかなければいけないのにはじかなかった場合にこの問題が発生し、一般ユーザに5の選択を許してしまう。

たとえばこれが、ショッピングカートの割り引き対象者のみの選択肢で、割引の選択肢だった場合、割引の対象者以外も割り引かれることになり直接の金銭面での被害が発生する。

対策

  • アルゴリズム上での入力チェック
  • 文字型(ctype)関数を使用しチェックを行う。(php4.3以上で標準オプションに)

コーディング

全体を包括してチェックする、アルゴリズムは存在しない。 ただし、MVCモデル(コーディング規約を参照)においてREQUESTクラス等で一括して入力のチェックを行うクラスを作成することによりもれなく、入力値のチェックが行うことができるだろう。

注意

is_numeric関数は、数字以外の文字列などもPHPが数値として認識できる範囲で、数値として認識するので、取り扱いに注意。


最終更新のRSS