XSS対策
htmlspecialchars
このメソッドを使えばフォームからJavaScriptを入力されたとしてもサニタイジング(無害化)する事ができます。メソッドの名前が長いので基本的には関数化します。
1 2 3 4 |
function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } |
上記の関数を使ってフォームの確認画面に下記のように関数を仕込みます。
1 2 |
フォームから入力された値 <?php echo h($_POST['your_name']) ; ?> |
クリックジャッキングの対策
PHPファイルの一番上に下記の記述をします。
1 |
header('X-FRAME-OPTIONS:DENY'); |
PHPのheader関数を使うとHTTPのレスポンスヘッダに対して項目を追加する事ができます。
CSRF対策
$_SESSIONを使って合言葉を残します。
セッションを宣言する。
1 |
session_start(); |
最初の画面(フォーム入力画面等)で合言葉を宣言する。
入力画面側
random_bytes関数でセキュアな文字列を生成して、それをbin2hex関数により16進数に変換しセッション変数に代入します。
1 2 3 |
if(!isset($_SESSION['csrfToken'])){ $_SESSION['csrfToken'] = bin2hex(random_bytes(32)); } |
定義したセッションは下記のようにフォームに埋め込みます。
1 |
<input type="hidden" name="csrf" value="<?php $_SESSION['csrfToken'] ?>"></input> |
確認画面側
次の画面(確認画面等)の上の方で下記のように画面フォームに埋め込んだcsrfトークンの値とセッションのCSRFトークンの値が一致しているかチェックします。
1 2 3 4 5 6 7 |
<?php if($_POST['csrf'] ===$_SESSION['csrfToken']) : ?> <form> 表示させるフォーム </form> <?php endif; ?> |
完了画面側
完了画面でも同じようにチェックした上で不要なトークンを削除しましょう。
1 2 3 4 5 |
<?php if($_POST['csrf'] ===$_SESSION['csrfToken']) : ?> <?php unset($_SESSION['csrfToken']); ?> <?php endif; ?> |
この記事へのコメントはありません。