なぜXSS対策が大事なのか?
最近ネットでは、XSS攻撃がし放題のSNS(?)があり話題となていますが、なぜXSS対策を怠ってはいけないのでしょうか?
XSS攻撃とは
XSS(クロスサイトスクリプティング) は、JavaScriptをサイト内に埋め込み、任意のコードを実行してユーザーを攻撃する手法です。 XSS対策を行っていないと任意のJSをサイト内に埋め込むことができてしまうので、ユーザーを任意のサイトに飛ばすだけではなく、パスワードの取得やアカウントの乗っ取りなどJSでできる全ての攻撃が可能になってしまいます。
XSS攻撃例
以下のようにGETパラメータをそのまま表示した場合
<a href="<?=$_GET['foo']?>">FOO</a>
このようなパラメータをつけてアクセスした場合
http://sample.com/?foo="><script>alert(123)</script"
以下のようなコードが表示され、JSが実行されてしまいます。
<a href=""><script>alert(123)</script"">FOO</a>
XSS対策
素PHPならhtmlspecialchars関数、他のフレームワークの場合だとselfのような各フレームワークで用意されているフィルタを使用することで大凡のXSSは防ぐことができます。
htmlspecialchars関数は、引数が3つあり冗長なのでラッパー関数にして利用すると保守性も上がり便利です。
function h($str) {
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
最後に
先述のサイトももうすでにXSS対策はだいぶなされてきたようですが、XSS以外にも他の脆弱性が潜んでいるので、フレームワークを使用せずに一からHPを作成する場合には、特にセキュリティ対策に気をつけた方が良いと思います。