XSSと文字参照が起きる理由

今回はXSS(クロスサイトスクリプティング)と文字参照がなぜ必要なのかという理由について考えていきたいと思います。

XSSとは?

 まず、XSSとは一言で言うと、コードを改竄して情報を抜き取るサーバー攻撃です。

例えば、画像のようなフォーム欄があったとします。

現時点ではこのようなコードとなっております。

このとき、フォーム欄のご感想に記述したコードが適用されたらどうなるでしょうか?

例えば、<script>alert()</script>と感想や名前欄に記されたらJavaScriptのダイアログボックスが表示されます。これは<script>alert()</script>を無害なスクリプト、つまりブラウザはこれもコードのうちと解釈して表示してしまうのです。

これを応用すると、そのページにきたら自動的に別の悪質サイトに飛んでしまうような記述もできてしまうのです。この手法は主に多くのユーザーが検閲できるコメント欄や製品の評価欄、掲示板などに利用されたりします。

そして、飛んだページ先で個人情報を入力させるようなページやCookieというパスワードなどの個人情報を含んだデータの盗難、または元々のページそのものを改竄させてしまうようなスクリプトをが行われてしまうという被害があります。

上記に挙げた例のように別のページに飛ぶということからこのXSSという名前の由来はきています。

文字参照が防いでくれる

このXSSの根本原因はフォームに入力された内容をスクリプトとみなしてしまい、反映してしまう脆弱性にあります。

入力された内容がコードと解釈されなければ、このような被害が起きないということです。
そこで、文字参照が出てきます。

文字参照とは文書中の文字を直接記すことが難しい時に、特定の英数字や記号の組み合わせを代わりに表示させるような記法でここで出てくる記号の文字を特殊文字といいます。

表示文字実体表示文字実体
<&lt;>&gt;
&&amp;&quot;

代表的な特殊文字である4つを取り上げました。もし先ほどのように<script>alert()</script>と記述されてもこの文字参照が適応されていたら&lt;script&gt;alert()&lt;/script&gt;と表示されます。
これによりスクリプトと解釈されず、XSSを防ぐことができるのです。

タグと解釈されないため、スクリプトと解釈されないということですね。

逆に、割り当てられている記号を記述することで特殊文字に指定されている文字が表示されます。

この文字を変換させる動作をエスケープともいいます。このエスケープ処理があることで多くのサイトがXSSを未然に防げているのです。

また、文字参照以外にも半角数字のみ記入可の入力欄や文字数に制限をつけることで悪質なスクリプトを記述させないという対策もあります。

まとめ

XSSと文字参照はどちらも概念として難しく、理解するのに時間がかかる内容のものでした。
現在は大規模なサービスでは知らず知らずのうちに対策されていたりするものですが、自分自身でサービスを作るときは自身で対策をしなければならないこともあります。そのため、概念としてどちらも知っておくべきことでしょう。

コメント

タイトルとURLをコピーしました