今回はクロスサイトスクリプティングについて学んでいきます。クロスサイトスクリプティングは他人のWEBサイトに悪意のあるプログラムコードを埋め込む攻撃手法です。どんなことが起きる可能性があるのか、何を対策しなければならないのかを学んでいきたいと思います。6月6日記事

目次



自分で自分を攻撃してみる。

コード

form.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム</title>
</head>
<body>
<form action="confirm.php" method="post">
<dl>
<dt>タイトル</dt>
<dd><input type="text" name="title"></dd>
<dt>内容</dt>
<dd><textarea name="contents" cols="30" rows="4"></textarea></dd>
<input type="submit" name="submit">
</form>

</body>
</html>

confirm.php(脆弱性あり)

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム</title>
</head>
<body>
<p>この内容でよろしいですか?</p>
<?php
echo $_POST["title"]."<br>";
echo $_POST["contents"];
?>

</body>
</html>

注入

タイトルのところでも、内容のところでもいいので、<script>alert("バカ”);</script>と入力します。JavaScriptプログラムを入れてみるのです。そして、送信ボタンを押すと、次のようになるはずです。

これを掲示板や皆が利用するところに入れられたら、そのサイトを見に来た人はこのようにでて非常に不愉快な思いをします。これはほんの序の口なのですが、第三者にJavaScriptを実行できる環境を与えてしまうと色々な問題が起こってしまいます。JavaScriptのプログラムコードを他人が記述でき、WEBサイトに埋め込まれ、第三者がそのWEBサイトにアクセスしてきた際に、第三者が被害を受けてしまうというということになります。

どんなことが起きるのか。

  1. 別のサイトに転送させられる。
  2. セッションIDが盗み取られる。→その結果、ログインが必要なサイトに第三者がログインできてしまう可能性がある。
  3. ユーザIDとパスワードが第三者によって入手される可能性がある。

何をすればよいのか。

そのWEBサイトの開発者以外にはJavaScriptを埋め込まれても実行させてはいけないこと をすればよいのです。JavaScriptは<script>alart("XXS");</script>と埋め込まれた時にアラートウインドウがでてきたらそれは脆弱性ありということです。対策をしていれば<script>alart("XSS")</script>という文字がでて、ウインドウは出てきません。

対策方法

confirm.php(対策)

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>フォーム</title>
</head>
<body>
<?php
echo htmlspecialchars($_POST["title"])."<br>";
echo htmlspecialchars($_POST["contents"]);
?>

</body>
</html>

POSTの前に htmlspecialchars関数を入れてあげるのです。 これはタグが入れられた場合にそのまま返すという関数です。対策をすればこのようになります。

タグのみがでて、JavaScriptの実行を回避できた。ということです。

以上クロスサイトスクリプティングの内容でした。

最終更新:2015年06月07日 18:50
添付ファイル