Developer

【PHP基礎】ファイルシステム関数⑥ htmlspecialchars関数
2021.03.29
Lv1

【PHP基礎】ファイルシステム関数⑥ htmlspecialchars関数

ファイルシステム関数⑥ htmlspecialchars関数

この記事では、
XSS(クロスサイトスクリプティング)を防ぐために使われる、
htmlspecialchars関数を説明します。

構文

htmlspecialchars ($string ,$flags, $encoding,$double_encode)

$stringのところに、出力したい文字列を入力します。
$flagsは文字列のエスケープのタイプを選択します。
既定ではダブルクオートはエスケープされ、
シングルクオートはエスケープされません。
$encodingは文字列のエンコードを指定します。
省略した場合、php.iniにあるdefault_charsetのエンコードを使います。
$double_encodeをfalseにすると、この関数を二重に使った際に、
エスケープした文字の中の&を再変換せずにそのままにします。
既定では再変換するので、
元の文字列「&」、
1回目の適用「&」、
2回目の適用「$amp;amp;」となっていきます。

ユーザー入力値によるHTML破壊の防止

htmlspecialchars関数は、ユーザー入力値をHTMLに埋め込むためにつかいます。
ユーザー入力値を直接htmlに埋め込まず、
htmlspecialchars関数を通して変換した後で、
HTMLに埋め込みます。

なぜなら、ユーザー入力値をそのままHTMLに埋め込むと、
HTMLが破壊されたり、予期せぬ動作をする可能性があるからです。

phpのecho式は、文字列をHTMLとして解釈します。
ですので、文字列の中にHTMLのタグが含まれると、
そのままHTMLとして出力されてしまいます。

打消し線のタグの例

以下の例では、ユーザー入力値をそのままHTMLに出力しているため、
打消し線のタグがそのままHTMLとして解釈され、
入力結果が打消し線付き文字として表示されました。

クロスサイトスクリプティング JavaScriptでのアラート表示

上記の入力値を、にすると、
クロスサイトスクリプティングと呼ばれる、攻撃が可能になります。
無害な例として、警告のメッセージを表示させる例を挙げます。

クロスサイトスクリプティング クッキーの設定

任意のJavaScriptコードを実行できるので、
クッキーの設定も書き換えることができます。

クロスサイトスクリプティング対策

HTMLの破壊や、クロスサイトスクリプティングを防ぐために、
htmlspecialcharsでユーザー入力値をエスケープしてから、
HTMLに出力しましょう。
htmlspecialchars関数を使うと、htmlタグをエスケープして、
単なる文字列として出力してくれます。

関連練習問題

XSSについての関連問題があります。

エスケープに関しての練習問題があります。

PHP基礎 連載目次リンク

PHP基礎 連載目次