来週PHPプロ・スタッフの面接があるのでかなりの確率で質問されるというWebアプリケーションのセキュリティに関して調べてみました。

■抑えておく用語

・XSS(クロスサイトスクリプティング) →フォームから入力した値がHTMLの一部として実行される場所で悪意あるスクリプトを動かしたり。具体的にはクッキーをパクッて他人のセッションを奪ったり。

・SQLインジェクション →SQL文を流し込むこと。例えばフォームの値をwhere句の条件に使う場合、入力フォームに”“1 or id = 2”“と入力したら・・・。

"update foo set cost = 100 where id = ".$_POST["id"];

・セッションハイジャック →他人のセッションを乗っ取ること。セッションIDの入ったクッキーがXSSによって盗まれたり、そのIDを使って成りすまされたり。

■対策

・GETパラメーター改竄 →GETの使用を最小限に留める。(Action=xxx的な処理の振り分けのフラグだけとか)

・HIDDEN値改竄(そしてAction値をフルパスに変更) →HIDDENを使わない。セッションにする。

・XSS →POSTにhtmlspecialchars。

・セッションハイジャック →セッションIDを単純な値にしたりCookieが盗まれなければ大丈夫。PHPのデフォルト設定ならそこそこ安心?(セッション有効時間24分、セッションIDはCookieに保存、Cookieはブラウザ閉じたら削除)

・SQLインジェクション →フォーム値の地道なValidationしかない?

Comments


Option