0
1

More than 3 years have passed since last update.

セキュリティーを犯す攻撃パターンとphpでの対策

Last updated at Posted at 2020-04-23

攻撃手法

①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を盗み、それを使用してアクセスする。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1