HTMLでXSSが起こらないようエスケープするには

コード

エスケープするための関数があるので紹介する。

$_POST["username"]

本来このようになっているところをhtmlspecialchars関数を用いて以下のように記述する。

htmlspecialchars($_POST["username"], ENT_QUOTES, 'UTF-8')

&, “, <, >がエスケープされるが、第2引数のENT_QUOTESを加えることで’もエスケープされる。 第3引数は文字セットである。

実際のミス

mysqli_real_escape_stringを使ってしまった。

これはSQL文でエスケープされる関数なので、今回はHTMLの時点でXSSが起きているので意味がなかった。

PHP内だけでhtmlspecialcharsを使ってしまった。

今回はHTML内でJavaScriptとして認識されてしまったので意味がなかった。