web入門
すばらしきwebの世界

クロスサイトスクリプティングを根絶しよう 【説明編】

2016.12.25セキュリティ

ここではクロスサイトスクリプティングについて、原因と対策について述べたいと思います。
具体的な例はここでは記載しません。


クロスサイトスクリプティングとは

ユーザや開発者の意図しないスクリプトが実行されてしまうwebアプリケーションの脆弱性です。


タイミング

当脆弱性が起こり得るタイミングは、webページをブラウザへ表示する時です。

webプログラミング言語により、動的にページの内容を表示する際、表示内容に意図しないスクリプトが組み込まれているとそのスクリプトが実行されてしまいます。


対策

意図しないスクリプトが実行されないように、webページに表示するパラメータに対しhtmlタグをエスケープします。

ここでいうパラメータとはwebプログラミン言語の変数です。

各webプログラム言語ではクロスサイトスクリプティングに対応する関数やメソッドが存在するので、それらをパラメータに対して実行します。

実行する箇所はブラウザにデータを表示する直前です。


具体的に

具体的には全ての画面表示するパラメータに対して、クロスサイトスクリプティングに対応する関数やメソッドを実行します。

ここでいうパラメータとはwebページに表示するwebプログラミン言語の変数です。変数の内容を画面に表示する全ての箇所です。

フロント側(画面、所謂データ出力直前)で行う利点は、網羅性が読み取りやすいことです。ここでいう網羅性とは、全てのパラメータに対して処理が施されているかが分かりやすいことにあります。

出力内容が明確であれ、全てのパラメータに処理を施すことでどんな値が入力されていようが、不正なスクリプトは実行されません。

以下はPHPを例としてクロスサイトスクリプティングの対応を記載します。

ex)
print(htmlspecialchars($value, ENT_QUOTES));

htmlspecialcharsの使用方法はPHPのマニュアルを参照して下さい。


最後に

10年前からクロスサイトスクリプティングの脅威は追及されていて未だに根絶されていないのが不思議ですが、最近の傾向と対策を以下に記載します。


セキュリティ対策されているフレームワークの使用

近年ではフレームワークの普及により、フレームワークでクロスサイトスクリプティングの対応をしているものが多いようです。
従って、フレームワークを使用する際はセキュリティ対策の施されているフレーワークを使用することをお勧めします。


クライアント側のクロスサイトスクリプティング

10年前はjava scriptの動作がブラウザで異なるという理由からjava scriptの使用は控えるという流れでしたが、今では時代も変わり、jqueryによるwebデザインのインタラクティブ化でjava scriptが盛んに使用されます。さらに言えば、ajaxによるjava scriptからwebサーバと通信することにより、サーバ側での対応だけでなくクライアント側でのクロスサイトスクリプティングの対策を施すことに注意が必要です。