問題
解決策
クロスサイトスクリプティング対策でPOSTの値をphpで加工する。
クロスサイトスクリプティングとは、フォーム入力にスクリプトを仕込むことで、クッキー情報を盗んだり等をする攻撃のことを指します。
その対策として、フォームから送信されたPOSTの値をphpで安全に受け取る方法をご紹介します。
「htmlspecialchars」でPOSTの値をエスケープ処理する。
「htmlspecialchars」でPOSTの値をエスケープ処理することで、POSTの値をphpで安全に受け取ることができます。
修正前
$name = $_POST['name'];
echo $name;
修正後
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
echo $name;
ポイント!
- 「htmlspecialchars」でhtml、javascript、phpのコードの実行を回避することができます。
- 「htmlspecialchars」の引数は(‘処理する値‘, 変換対象となる文字列の指定, 文字を変換するときに使うエンコーディングの文字セット)
「htmlspecialchars」で変換できる文字列
変換対象の文字列 | 変換後の文字列 |
---|---|
& (アンパサンド) | & |
” (ダブルクォート) | " (ENT_NOQUOTES が指定されていない場合) |
‘ (シングルクォート) | ' (ENT_QUOTES が指定されている場合) |
< (小なり) | < |
> (大なり) | > |
変換対象となる文字列の指定
ENT_COMPAT | ダブルクオートは変換するがシングルクオートは変換しない。 |
---|---|
ENT_QUOTES | シングルクオートとダブルクオートを両方とも変換する。 |
ENT_NOQUOTES | シングルクオートとダブルクオートを両方とも変換しない。 |
文字を変換するときに使うエンコーディングの文字セット
UTF-8 | マルチバイト8ビットのUnicode。 |
---|---|
Shift_JIS | 日本語。 |
EUC-JP | 日本語。 |
参考ページ
以下のサイトが、より詳しく解説してくれています。
【[PHP]XSS、クリックジャッキング、CSRFの対策方法 – Qiita】
https://qiita.com/suguru6213/items/e046bd08d14ce77ebb7f
【PHP: htmlspecialchars – Manual 】
https://www.php.net/manual/ja/function.htmlspecialchars.php
コメント