2008-08-22 18:36:38
セキュアなWEBサイト制作(1) -クロスサイト・スクリプティング-
テーマ:WEBサイト制作今回から、WEBサイトを制作する際、セキュリティ面で注意しなければいけない
事柄をご紹介していきます。
第1回は、「クロスサイト・スクリプティング」です。
2chを代表とする掲示板型のサイトや、個人情報などを登録するようなサイトでは、
ユーザーが入力した内容を、スレッドや入力内容確認画面で表示させるといった
仕組みが多く使われています。
このようなサイトは、クロスサイト・スクリプティングによる攻撃に注意して
WEBサイトを構築しなければいけません。
では、クロスサイトスクリプティングとはどのような攻撃でしょうか。
例を出して解説いたします。
まず、以下のようなページを用意します。
「表示」ボタンをクリックすると、以下のようなプログラムが呼び出され、
テキストエリアに入力した内容がそのまま表示されます。
<?php
echo $_POST['inp'];
?>
たとえば、テキストエリアに「SEO」と入力して「表示」ボタンをクリックすると、
「SEO」とだけ表示されたページが開きます。
では、ここに下記のような文字を入力し、「表示」ボタンをクリックするとどうなるでしょう。
<script type="text/javascript">
alert("ウイルス");
</script>
javascriptを使ったことがある方であれば、分かりますね。
このように、javascriptが実行され、アラートBOXが表示されてしまうのです。
javascriptを埋め込むことができてしまうと、悪意のあるユーザーは自分で作成した
悪意のあるサイトにアクセスさせ、そこでクッキーなどの情報を採取するというような
ことができてしまいます。
では、この問題を回避するために、どのようなことができるでしょうか。
PHPには、こういった問題を解決するような関数が用意されています。
その例として、htmlspecialchars関数や、strip_tags関数が挙げられます。
htmlspecialchars関数は、'<'や'>'といった記号を、'<'や'>'のような
特殊な文字に置き換えます。
このような特殊な文字は、ブラウザ上は'<'、'>'のように見えますが、
タグとしての効果は無くなります。
実際に置換されているかどうかは、ブラウザの「ソースを表示する」機能を
使っていただければ分かると思います。
一方、strip_tags関数は、htmlタグを全て切り取ってしまいます。
では、これらの関数を使った以下のようなプログラムを実行してみます。
<?php
echo htmlspecialchars($_POST['text']);
echo "<br><br>";
echo strip_tags($_POST['text']);
?>
いかがでしょうか。javascriptが効かなくなり、アラートBOXが出なくなりましたね。
ちなみにソースを表示してみると、
<script type="text/javascript">
alert("ウイルス");
</script>
alert("ウイルス");
のようになり、上側は記号が特殊文字に置換され、下側はscriptタグごと削除されていることが
分かります。
このように、WEBサイトにはセキュリティ面で脆弱になってしまう要素が様々な部分に存在しますが、
プログラム側で回避できるような機能が用意されています。
WEBサイト制作時には常に様々な自体を想定して、サイトを構築する必要があるでしょう。
(坪 昌史)
【参考・引用】
・ThinkIT
http://www.thinkit.co.jp/cert/tech/13/2/2.htm
・IPA 情報処理推進機構
http://www.ipa.go.jp/security/vuln/20060131_websecurity.html




