BeCrazyBeCrazyメニューTopHTTP通信のGETやPOSTのデータ送信を悪用する手法としてクロスサイトスクリプティングがあります。クロスサイトスクリプティングの概要と、実際に悪用される場合どのようになってしまうかをテストして、危険性を認識しましょう。クロスサイトスクリプティング(XSS)とはTOPセキュリティクロスサイトスクリプティング(XSS)とは1年以内に更新されました。2019年08月06日HTTP通信のGETやPOSTのデータ送信を悪用する手法としてクロスサイトスクリプティングがあります。クロスサイトスクリプティングの概要と、実際に悪用される場合どのようになってしまうかをテストして、危険性を認識しましょう。クロスサイトスクリプティング(XSS)とはクロスサイトスクリプティングとは、クロスサイト=サイトをまたいで、スクリプティング=スクリプト(プログラムの一種)の実行、を行うクラッカー(悪用するハッカー)の攻撃手法です。GETメソッドやPOSTメソッドでのデータ送信は、文字データなどを送信できます。その文字データは基本的には入力された内容をそのまま送りつけるだけです。入力されたデータ自体がスクリプト、つまりプログラムのコードだった場合、そのデータをそのまま次の画面に表示などを行った際にそのコードが実行されてしまう可能性があります。言葉だけでは難しいので、実際にどのように悪用されるか見てみましょう。実際にクロスサイトスクリプティングを行ってみるまずは簡単にHTMLをXSSで悪用まずは簡単にHTMLをGETデータに紛れ込ませて、そのまま出力してみます。使用する言語はPHPで行います。xss-test.phpファイルを作成し、以下のようなデータをそのまま表示するようにしてみます。$_GET["data"];ではこのPHPファイルにGETデータを送りつけてみましょう。http://localhost:8888/〜〜/xss-test.php?data=<h1>HTMLコードをデータとして送信</h1>というURLでアクセスしてみます。PHPファイルではh1タグなどは利用していません。それなのに、GETデータとしてHTMLコードが入っていてそれをそのまま表示すると、なんとh1タグがそのまま利用されてしまいます。h1タグを利用するつもりや他のHTMLを利用するつもりがなくてもこのように表示されてしまいます。HTMLだけであればいいですが...。スクリプトのコードを実行してみる先程の送るデータを変更してみます。http://localhost:8888/〜〜/xss-test.php?data=<script>while(true){alert("XSS!!");}</script>というURLでアクセスします。Chromeだと、このXSSが自動で無効になってしまうので、テストをFirefoxで行っていきます。Chrome優秀ですね。アクセスした結果は以下のようになります。「XSS!!」というダイアログが、OKを押しても永遠に消えません。今回はダイアログを表示しているだけですが、悪用しようとすればかなり危険なのがわかるかと思います。このように送るデータをそのままHTMLのコードやスクリプトコードとして送信し、クライアントに送られてきた悪意のあるコードが実行されてしまいます。XSSの対策XSSのそもそもの原因は、HTMLやスクリプトとして認識する<h1>などのタグが原因です。<・>・&・"・'これらのHTMLやスクリプトとして認識される記号をそのまま表示することが原因です。HTMLにはこれらのHTMLで利用される特殊文字を、代用する記号が用意されています。<であれば&lt、>であれば&gtと決まっています。これらの代用する記号をHTMLエンティティと言います。XSSの対策としては、HTMLで通常利用される記号を、表示専用のHTMLエンティティに置き換えれば、悪意のあるコードは実行されません。WEBで利用されるプログラミング言語には、これらのHTMLエンティティに変換するための機能が基本的には備わっているため、送られてきたデータを適切にHTMLエンティティに変換してから表示するようにしましょう。まとめクロスサイトスクリプティングという攻撃手法があるXSSの対策を適切に行わないと、ユーザーに不利益を被るXSSの対策は、HTMLエンティティへの変換を行うこと以上の3つについて説明しました。HTMLエンティティへの変換についてはそれぞれのプログラミング言語にて改めて記事にします。次の記事クロスサイトリクエストフォージェリ(CSRF)とは。