skillup

技術ブログ

サーバー・ネットワーク

クロスサイトスクリプティング(XSS)

投稿日:2017年2月6日 更新日:

これまた非常によく聞く攻撃方法ですね。

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

動的なページの表示生成の際に悪意のあるスクリプトを埋め込む行為。

具体的にはここが例え話もあって一番わかりやすいですな。

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

あるいは下記のソースの/xssのページ。

https://github.com/umanari145/secure

要約としてはiframeのsrcやinputのタグの中に<script>〜</script>や画面遷移系のHTML(たとえばform)を入れ、クッキーを盗み出し、SESSION_IDなどを抜き出したり、情報を書き換えたりします。下記の本に例が詳しいです。

安全なWebアプリケーションの作り方

被害

  • 本物サイト上にニセの情報がばらまかれる
  • ブラウザが保存しているCookieを取得され、なりすましにつながったり、個人情報の流出につながる
  • 任意のCookieをブラウザに保存させられる→セッションIDの固定化など
  • 特に入力を内容を確認させる表示画面(会員登録、アンケート、検索結果の表示、エラー表示などに紛れ込みやすい

対策

  • ウェブページに出力するすべての要素に対して、エスケープ処理を施す(いわゆるHTMLエスケープ)
  • 属性値は基本的にダブルクオートでくくる
  • URL出力の差異にはhttp://もしくはhttpsのもののみだけを対象とする(javascriptのものを防ぐ)
  • <script>~</script>の内容を動的に生成しない
  • 詳細なエラーメッセージを画面に表示しない
  • スタイルシートを任意のサイトから取り込めるようにしない
  • HTTPレスポンスヘッダのContent-Typeには文字コードを必ず指定する(指定しないと一部の文字コードがスクリプトになる)

その他

ちなみに現在のブラウザではXSSが自動的でエスケープされることがあり、「体系的に学ぶ〜」のサンプルなどは実行できないことが多いです。

その場合、MACであれば下記のような方法でXSSのフィルターを無効化しましょう。

MacOSのChromeで、XSS Auditorを無効にする方法(2016年3月以降)

-サーバー・ネットワーク
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Azureの復習

今年からAzureの案件にはいっていろいろとインフラ周りを整理しておりますので、復習も兼ねて少しまとめておこうかと思います。 とりあえず出てくる重要な概念やサービスを五月雨に・・・ Contents1 …

no image

vimの小ネタ(主にテキスト置換系に関して)

前回に引き続き、またまたvimの小ネタなど Contents1 マクロ2 単純な置換3 改行系の置換4 一括置換 マクロ エディタ上である動作を記録させておきたい場合、q+任意の文字(例えばa)+任意 …

no image

AWSのVPCの設定に関して

AWSでEC2を立ち上げたことはありましたが、VPC(Virtual Private Cloud)は使ったことがなかったので、これを機に調査してみました。 Contents1 VPCとは?2 構成3 …

no image

Firebaseでのミニアプリデプロイ

KVS的なDBを使うかもしれず、firebaseの復習をしております。以前、firebaseのサンプルなどちょこちょこ動かしましたが、firebaseに登録をしただけでデプロイまではしておりませんでし …

no image

webサーバーがどのように動いているか(GETとPOST)

webがリクエストを受け取って画面に表示するまでの流れをおさらい。基本です。 Contents1 全体の流れ2 参考文献 全体の流れ 1 ユーザーがブラウザのURL欄に[crayon-662c7bad …

アーカイブ