対策1.htmlspecialchars()を使う<SQLインジェクション>
そういったSQLインジェクションを予防する手段として
htmlspecialchars()という関数は覚えておこう。
htmlspecialchars()関数は特殊文字をHTMLエンティティに変換する関数で、
<>を<>といった形に変換する。
タグを取り除く関数として、
strip_tags()関数などがあるがallowable_tagsで指定された許可した全てのタグの属性を修正しなかったり
http://www.phppro.jp/qa/103といったケースが考えられるので、
やはりhtmlspecialchars()関数を使った方が良いようだ。
また、XSSに脆弱とならないように第2引数として"(ダブルクォーテーション)だけでなく
'(シングルクォーテーション)も消すような指定としてENT_QUOTESをつけた方が良い。
何も指定しない場合にはENT_COMPATと同じ処理を行い"(ダブルクォーテーション)のみHTMLエンティティに変換する。
さらに、不正な文字エンコーディングを利用した攻撃を防ぐために3つ目の引数も指定しておいた方が良い。
対策2.全ての変数を文字列をデータベース用にエスケープする<SQLインジェクション>
~_escape_string系の関数を使うことで特殊文字をエスケープする
対策3.入力チェックを行う<SQLインジェクション、ディレクトリトラバーサル>
../等の入力文字は例外処理にする->ディレクトリートラバーサル対策
入力値が想定される範囲内かチェック(preg_match()やis_numeric()等を用いる)
最終更新:2011年04月09日 13:51