【セキュリティ】XSS脆弱性作ってみた【マネしないでね】

セキュリティ

みなさんこんにちは、ちょいまけです。

今回は「XSS(クロスサイトスクリプティング)脆弱性を作ってみた」ので、XSSの実例についてデモを踏まえて説明します。

情報系の方やプログラミングの勉強をされている方ならXSSという用語は聞いたことがあるかも知れません。

しかし具体的にどういう方法の攻撃で、攻撃により何が起こるのかを見たことある方は意外と多くないのかもと感じています。僕も今回の記事を作る過程で初めて見ました。

ですので、XSSが具体的にどういうものなのかを動画を交えて説明し、またプログラミングちょっとわかる人向けにPHPで実装したXSS脆弱性のあるコードとその対策について紹介しています。

XSSを動画で見てみたいという方、XSS脆弱性のあるコードがどんなコードなのか気になる方はぜひご覧ください。

XSS脆弱性って何?

XSS脆弱性とは、ユーザーがWebページにアクセスすることで不正なスクリプトなどが実行されてしまう脆弱性のことです。

この脆弱性を悪用されると

  • 個人情報が盗まれたり
  • 自分のお金を勝手に使われたり
  • サービスにて身に覚えの無い操作をされたり

といった被害が発生することがあります。

XSSについて説明した記事が以下にありますので、詳しく知りたい方は以下の記事をご覧ください。

XSSを動画でみてみよう

XSSって具体的にどういう攻撃なの?といったところがピンときにくいかも知れないので、XSSがどういうものか動画で見てみましょう。

サンプル用の脆弱なアプリを実装してみたので、そこにXSSを仕掛けます。

デモ

それでは早速XSS攻撃を実践します。以下の動画では名前を入力する欄にスクリプトを入力して、クッキー情報が表示させるという攻撃を行っています。

解説

名前入力欄に「ちょいまけ」のような普通の日本語を入れて送信ボタンを押すと、そのまま名前が表示されます。これが正常な動作ですが…

" onclick="alert(document.cookie)というスクリプトを入力して、空の名前入力欄をクリックすると

PHPSESSIDという非常に重要な情報が表示されます。このIDが外部に漏れると、個人情報が盗まれるなどの被害にあう可能性があります。

実装と対策: PHPわかる人向け

デモだけでは物足りないというプログラミングガチ勢向けに、XSS脆弱性を含んだプログラムがどういったものなのか、またXSSへの対策はどうすれば良いかを説明します。

実装

問題の脆弱アプリのコードは以下の通りです。

<?php
session_start();
?>
<body>
    <h1>脆弱アプリ</h1>
    <form action="vulnerable.php">
    名前を入力してね: <input type="text" name="name" size="40" value="<?php echo $_GET['name']; ?>">
    <input type="submit" value="送信">
    </form>
</body>

inputタグのvalueユーザーが入力した内容がそのまま出力される実装になっています。ここにスクリプトが入力されてしまうとそのスクリプトがそのまま実行されてしまい、XSSの攻撃が成立してしまいます。

対策

この脆弱性への対策はユーザーが入力した内容をエスケープ(サーバーに送信された文字列を安全なものに変換すること)することです。

PHPではhtmlspechaicharsという関数を使用します。以下実装例です。

<?php
session_start();
?>
<body>
    <h1>脆弱アプリ</h1>
    <form action="vulnerable.php">
    名前を入力してね: <input type="text" name="name" size="40" "value="<?php echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'utf-8'); ?>">
    <input type="submit" value="送信">
    </form>
</body>

上記の対応を行うと、スクリプトは実行されずそのまま文字列として表示されるようになります。これで基本的なXSS対策になっています。

さいごに: XSSは犯罪です

XSSについて学び「ちょっと色んなサイトで試してみたい」とか思った方いらっしゃいませんか?僕は正直ちょっと思いました。

しかしXSSは犯罪です。普通に不正アクセス禁止法で捕まります。

XSSをデモで紹介した目的は、XSSがどういうものか理解してもらいたかったためであり、決して犯罪者を増やす目的ではありません。

犯罪をするために今回の記事の内容を使うのではなく、犯罪を防ぐために使っていただければ幸いです。

今回は以上です。
最後まで読んでいただきまして、ありがとうございました。

コメント

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