やっほー
クロスサイト・スクリプティングをクソわかりやすく解説!

クロスサイト・スクリプティングをクソわかりやすく解説!

クロスサイト・スクリプティング

セキュリティの知識がある方なら一度は聞いたことがあるかもしれません。

ただ、こういったセキュリティ用語は体験できる機会が少ないので、なかなか知識として定着しにくいものです。

ということで今回は、クロスサイト・スクリプティングについてクソわかりやすく解説したいと思います!

本記事は以下の書籍を参考にしています。セキュリティの勉強をしたい方にはおすすめです。この一冊で大体のことは理解できます

クロスサイト・スクリプティングとは

通常、Webアプリケーションには外部からの入力などに応じて表示する箇所があり、この部分のHTML生成の実装に問題があると起きる脆弱性のことを、クロスサイト・スクリプティング(以下、XSS)と表現します。

CSSと表記しないのは、Cascading Style Sheetsと混同するためです。

XSSによるクッキー値の盗み出し

まず、以下のようなPHPがあるとします。

 

このPHPに対して、上記のURLが入力されたとします。

 

XSS_正常パターン

画面は正常に表示されますね。

 

では、次に上記のようなURLを入力してみます。

 

XSS_異常パターン

すると、クッキーにセットされたセッションIDが丸見えですね。

パラメータにスクリプトを指定することでJavaScriptが実行されました。

受動的攻撃により別人のクッキー値を盗み出す

さて、先ほどはクッキーのセッションIDを表示しましたが、これは攻撃者のセッションIDです。

実際には、攻撃者のセッションIDを表示しても意味がありません。

ということで、次は利用者を罠のあるサイトへ誘導します。

 

上記のようなHTMLがあるとします。

このHTMLの中に記載されているifame要素中のURLは悪意のあるページとします。

 

XSS_受動的攻撃_攻撃前

初期表示時です。

 

初期表示後、自動的に画面遷移します。これで、このサイト(ページ)に訪れた人はセッションIDを盗まれるという事になります。

今は画面に出てしまっていますが、このセッションIDをメールで攻撃者のメールサーバに送信すれば攻撃成功です。

 

最終的な画面(http://△△△)が上記のようなPHPの場合、メールで情報を受け取ることが可能です。

 

XSS_受動的攻撃_攻撃後(メール)

Webメールで確認すると、このような感じになります。

XSSへの対策

先ほどの例でも分かる通り、「<」や「’」などの文字を正しく扱う必要があります。一般的にはエスケープと呼ばれるものですね。

この「エスケープを正しく行う」ことこそ、XSSの対策につながります。

  • PHPの場合:htmlspecialchars関数
  • Perlの場合:escapeHTML関数

まとめ

今回はXSSについて解説しましたが、XSSはかなり複雑です。

対策すべきことが上記以外にもあるため、完全に対策することが難しくもあります。

しかし、どういった問題があるのか、そもそもXSSはどのようなものなのかを知ることで対策を練ることはできます。

まずは敵を知るということですね!

クロスサイト・スクリプティングをクソわかりやすく解説!
フォローしてもらえると泣いて喜びます