XSS

XSS(クロスサイトスクリプティング)とは?【セキュリティ】

ネットワークにおける脆弱性には様々なものがありますが、今回はその中の1つ、XSSについて説明していきます。

 

XSSとは

XSS(クロスサイトスクリプティング)とはcross site scriptingの略であり、攻撃者が脆弱性のあるサイトに悪意のあるスクリプトを埋め込む攻撃手法です。

ここでのスクリプトとはJavaScriptのようなもので、いわゆるクライアントサイドのスクリプトです。

簡単な例として、ウイルスに感染しているとアラートを出すようなスクリプトを仕込むとします。

ここで、名前を入力してポストする機能をPHPで実装しているとしましょう。この時、名前を次のようにして表示するとします。

echo $_POST['name'];

この時攻撃者がnameの値を次のようにセットしているとしましょう。

name=<script>alert('PCがウイルスに感染しています!');</script>

この状態でユーザーがページにアクセスし、POSTを実行してしまうと、上記の意図しないアラートが発生してXSSとなります。

GETリクエストではURLにクエリパラメータを付加しますが、URLには長さ制限があるため直接長いスクリプトを記述することは難しいです。ただ、スクリプトを直接書くのではなくスクリプトの場所を指定することで埋め込むことも可能となっています。

http://example.com/?name=<script src="http://xss.com/script.js"></script>

こうすることでスクリプトを埋め込むことができますが、この場合は攻撃者の用意したURLがログに残るため、攻撃者はサイトのアドレスを頻繁に変えたりする必要が出てきます。

上記の例ではURLなどを見ると攻撃に気づくことができます。しかし以下のようにhidden指定のinputなどを利用することで、被害に気づきにくくすることができます。

<form action="http://example.com/" method="POST" name ="hoge">
 <input type="hidden" name="gender" value='<script>alert("PCがウイルスに感染しています");</script>'>
</form>
<script>document.hoge.submit()</script>

こうすることで、被害者が上記の罠を設置されたサイトを表示してしまうと、自動的にsubmitされ悪意のあるスクリプトが実行されてしまいます。

 

XSSによる被害は以下のようなものがあります。

  • セッションハイジャック(セッションの乗っ取り)
  • Cookieなどの情報の抜き取り
  • ウェブサイトの改竄
  • ログインユーザーの乗っ取り

 

XSSの対策

XSSは、<script></script>のようにタグで囲むことでスクリプトとして認識させているため、これらを特殊文字として認識させないようにエスケープ(サニタイズ)することが対策となります。

例えば次のように置き換えることができます。

  • 「<」 → &lt;
  • 「>」 → &gt;
  • 「”」 → &quot;
  • 「&」→ &amp;

こうすることで、「<script>alert(“PCがウイルスに感染しています”);</script>」という文字列は「&lt;script&gt;alert(“PCがウイルスに感染しています”);&lt;/script&gt;」となります。

XSSは、このようにちょっとした工夫で防ぐことができるため、開発時は必ず対策するようにしましょう。

CSRF(クロスサイトリクエストフォージェリ)とは?【セキュリティ】