今回はクロスサイトスクリプティングについて学んでいきます。クロスサイトスクリプティングは他人の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サイトにアクセスしてきた際に、第三者が被害を受けてしまうというということになります。
その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の実行を回避できた。ということです。
以上クロスサイトスクリプティングの内容でした。