Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

[タスク] モデルに「除外フィールド」を設置する。

ver 0.0.2の修正箇所。セキュリティ面強化の修正。


<form action="target_url.php" method="POST">
    <input name="param_1" type="text" maxlength="8" value="" />
    <select name="param_2">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    <input type="submit" value="SUBMIT" />
</form>

ごく簡単なフォームの例ですが、これは素直にブラウザ上の操作のみを行う場合、
param_1は8文字以内、param_2は1,2,3のいずれかのみという制約をもってPOST送信を行います。

しかし諸々のツールを使う事でブラウザ操作の制約を超えて値を改ざんしたり、
あるいはパラメータを追加したりする事が可能です。
また、それによって意図しないデータ入力を受け付けてしまう場合があります。
特にフレームワークの場合はDBテーブルのフィールド名から自動的にINSERTやUPDATEのSQLを作る事が多く、
「ある処理ではこのフィールドのユーザ入力を受け付けたくないが、ツールでそのフィールドのパラメータを追加されるとそれを通してしまう」
という状態が発生しやすくなります。

それに対する対策として、フレームワークで除外するフィールドを設定できるように組み込んでしまおうと思い、
モデルで指定のフィールドを保存対象から除外するよう設定を追加しました。
これはコントローラごと、あるいはアクションごとに設定する事を想定しています。
Modelについての項目でこれについて説明書きを追加しましたので、
設定方法について詳しくはそちらにて。$_exclude_fieldsについてで書かれてあります。


ところで、
「ユーザは画面に設置したFORMを素直にそのまま操作してくれるとは限らない
 (=ツールなどでパラメータ改ざんされる事を想定せよ)」
というのは割とセキュリティ上の常識だと思ってるんですが、
今の職場ではその観点が完全に抜け落ちたサイト構成になっており、
本当にこれが常識なのか自信がなくなってきてます。(まあ今月で退職しますが)

TrackBack URL :

Leave a comment  

name

email

website

Submit comment