攻撃手法
①XSS
目的のサイトに対して、直接情報を送って、攻撃(サイトに表示、データを攻撃側に送信)。ユーザからのデータを表示されるサイトが対象
対策
入力フィルタ、出力エスケープ
入力面
array_key_exist()で第二引数のキーに第一引数に相当するものがあるか調べる。つまり入力された値をそのまま許可しないようにするためのもの。
出力面
formなどで入力された値をHTMLに出力される前にエスケープする。そのようにすることで、HTMLに出力された時に中身がHTMLタグとして読み込まれないようにするためである。HTML上に出てしまうphpの変数にはエスケープして表示させたないといけない。
②CSRF
ユーザーが意図せず、自分のサーバ側を攻撃してしまう。cookiesにログイン情報が残っている状態の時、本来のアプリと別の場所で悪意のあるリンクを押した時に、そのリンクからアプリのDBアクセスをして変更をしようとする事。
対策
sessionを利用する。sessionはURLをまたいでファイルが変わっても、値が残るような配列。
アプリのページが立ち上がれば、トークンを作成し、SESSIONの中に格納する
↓
それを以下のようにHTMLのformに隠して挟み込む
<input type="hidden" id="token" name="token" value"<?= h($_SESSION['token']);?>">
#h()はエスケープ
↓
サーバ側で、送られてきた$_SESSION['token']と、作成したtokenが同じ値になるかどうかを調べる。
同じならば全ての送られてきた値が、正常の送信と判断する。
③SQLインジェクション
クエリが記述されるページに対して、データを送って不正なクエリを作成させること
対策
PDOオブジェクトでクエリをセットする時に、段階を分けることで可能にする。
:で仮の変数を使ってクエリを作成する
⬇️
prepareでクエリをPDOオブジェクトにセットする。これによって作られるのはPDOステートメントクラス。
⬇️
PDOステートメントインスタンスにbindValueやbindParamで仮の変数に値を入れて、クエリを正常な形にする
⬇️
PDOステートメントインスタンスにexecuteで実行
④セッションハイジャック
ユーザーのsession_idを盗み、それを使用してアクセスする。