なぜXSS対策が大事なのか?

なぜ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を作成する場合には、特にセキュリティ対策に気をつけた方が良いと思います。