こんにちは、ともです。
この記事では、クロスサイトスクリプティング(XSS)という脆弱性について勉強したことをまとめます。
アプリケーションを作る際には、駆け出しエンジニアであっても、動けば良いというような気持ちで作ってはいけません。有名な脆弱性くらいはしっかりと理解し対処していきたいです。
そこで、駆け出しエンジニアである僕がPHPで『XSS』についての理解をまとめます。
クロスサイトスクリプティング(XSS)とは
XSSは『Cross Site Scripting』の頭文字をとりできました。頭文字をとると『CSS』となりますが、スタイルシートと混同しやすいため『XSS』となりました。
クロスサイトスクリプティング(XSS)とはユーザ入力により動的にHTMLを生成するサイトにおいて、出力情報をエスケープしない事が原因で起こる脆弱性です。
例えばHTMLの中に次の2つの文字列が挿入された場合を考えてみます。
// ①(問題無い)Hello Worldが埋め込まれた
<span>Hello World</span>
// ②(問題有り)スクリプトが埋め込まれた
<span><script>alert("攻撃!")</script></span>
①はただの文字列が埋め込まれただけですので問題ありません。
②のようにJavaScriptが埋め込まれた場合、alertメソッドが実行されてしまいます。

ブラウザが『<script>alert('攻撃!')</script>
』をただの文字列として認識してくれれば問題が解決します。
対処方法
スクリプトをただの文字列として変換する処理をエスケープと言います。
PHPの場合、HTML側でJavaScriptをエスケープするにはhtmlspecialcharsメソッドが利用できます。
<span>
<?php
echo htmlspecialchars('<script>alert('攻撃!')</script>', ENT_QUOTES, 'UTF-8');
?>
</span>
第一引数にエスケープしたい文字列をセットし、第二引数にENT_QUOTESを指定しシングルクオートもエスケープするようします。
まとめ
とても簡単にですが、XSSについて解説しました。少しでも安全なアプリケーションを作成できるように、駆け出しであっても気をつけたいです。