PHPに限らずセキュリティについてまとめてみた。
##権限の範囲を最小に
ユーザーや管理者等の権限が及ぶ範囲を、最小に抑える。
権限の範囲外に出ることができないかを意識して、
例えば、違うユーザーの権限に入れないようになっているか?
管理者の権限は本当に最小なのか?など、考えて権限の振り分けを行う。
##2重3重の対策を
1つのセキュリティ対策を行って安心してしまうのは危険。
突破されることも考えて、2重3重と対策してくことでより安全なシステムになる。
##シンプルな対策を心がける
あまり複雑な対策をしてしまうと、逆に脆弱性につながることも有る。
なるべくシンプルに対策をして行くことを心がけるようにする。
##入力データは必ずバリデート
入力は、開発者が意図しない値が送られて来るため、100%汚染されていると思ってもいい。
開発者が意図した値になるようにバリデートして、汚染リスクがあるものは弾くようにすれば、
安全性は高まっていく。
また、入力値に汚染リスクがある場合に、補正してあげるという方法もあるが、補正した上で更にバリデートしないと、補正自体に不具合があった場合は何も意味ない。
更に付け加えて、ホワイトリストアプローチも行うべき。
にバリデートされた値と入力された値を、変数などを利用して区別したほうが、より理解しやすい。
$param
と$clear
などのように
##出力は必ずエスケープ
ユーザーの入力した値、DBからのデータなどを表示する際に、エスケープ及びエンコードをして本来の機能や役割を果たす形で出力をするようにしなければならない。
入力と同様に、エスケープ後のデータとエスケープ前のデータとで、変数などを使用して区別しておくほうがいい。