情報の漏えいや不正な利用から守るために開発者が行う対策をまとめる
パラメータ改ざん
GetとPostの送信方法のうち、
アドレスバーからURLパラメータを直接改ざんし不正利用する攻撃
対策➡Getではなくセキュリティのさらに強いPostを使う
SQLインジェクション
クエリ※を操作して不正にデータベースを操作する、
SQL文の脆弱部分を不正利用した攻撃
対策➡正しいセミコロン、シングルクォーテーションを心掛け、
エスケープ処理をする
対策➡SQLよりPHPのプリペアドステートメント※を利用する
クエリとは
データベースに対する命令文のこと
プリペアドステートメント(prepared statement)とは
プログラム上で動的にSQL文を生成する必要があるとき、
可変部分を変数のようにしたSQL文をあらかじめ作成しておき、
値の挿入は処理系に行わせる方式。
実行効率を向上させ、SQLインジェクションを防止する効果がある。
https://e-words.jp/w/%E3%83%97%E3%83%AA%E3%83%9A%E3%82%A2%E3%83%89%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88.html
クロスサイトスクリプティング(XSS)
SNSなどのユーザー入力サイトで悪質なスクリプトを表示すること
対策➡勝手なコードをうたせないように入力値を制限する
対策➡スクリプトの構成に必要な記号(<>など)を置換させる
⇒htmlspecialchars関数が担ってくれる
記述方法:
htmlspecialchars( 変換対象, 変換パターン, 文字コード )
クロスサイトリクエストフォージェリ(CSRF)
気づかない間に自分が悪者にされてしまうような、
意図しないリクエストを強要して攻撃手法
対策➡トークン※を使って、
正しいフォームから遷移された正しいデータであることを確かめる
トークンの作成方法
トークンはセッションIDをハッシュ化して作成される⇒hash関数が担ってくれる
記述例(バージョンごとに異なる方法):
hash('sha512', 'テスト', false)
セッションハイジャック
他人のセッションIDを盗んで本人になりすます。例としてクレジットカードの不正利用が挙げられる
対策➡画面遷移するたびにセッションIDを再作成する⇒session_regeneraite_id関数が担ってくれる
記述方法:
session_regenerate_id(true)