問題 × 解決策

【クロスサイトスクリプティング対策】phpでフォームのPOSTの値を安全に受け取る方法

問題

フォームから送信されたPOSTの値をphpで安全に受け取るようにするには?

解決策

「htmlspecialchars('POSTの値', ENT_QUOTES, 'UTF-8')」でPOSTの値をエスケープ処理する。

 

クロスサイトスクリプティング対策で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 が指定されている場合)
< (小なり) &lt;
> (大なり) &gt;

変換対象となる文字列の指定

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

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

five × 1 =

「問題 × 解決策」
月別アーカイブ一覧

「問題 × 解決策」
月別アーカイブ一覧