skillup

技術ブログ

サーバー・ネットワーク

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

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

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

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

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

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

https://www.ipa.go.jp/security/vuln/vuln_contents/xss.html

あるいは下記のソースの/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

nginx基本

データベースについて勉強していましたが、実務でnginxを触る機会があったので、これを機に勉強。 Contents1 参考文献2 nginx基礎3 コアモジュール4 httpモジュール5 設定ファイル …

no image

nginxの設定&php-fpmインストール

本日、久しぶりにPHPのWebアプリを別サーバーに移行したのですが、nginxの設定でかなり手間取りましたのでちょっと記録しておきます。 Contents1 nginxの設定1.1 インストール1.2 …

no image

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

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

no image

Addtypeについて

htmlにはPHPを埋め込むことができますが、拡張子がhtmlの場合、そのままでは実行できません。 この場合、通常では拡張子を変えなければいけないところですが、apacheを使っている場合、設定ファイ …

no image

nohup(sshログアウトしてもコマンドは続く)+ StickyBit(誰もで書き込み自由)

インフラ系の小ネタです Contents1 nohup2 Sticky Bit(スティッキービット) nohup sshでログインしている時に長時間かかるような処理を実行中、ログアウトするとそのコマン …