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

form以外でのPOST送信(というかHTTP通信全般)

前回の記事に引き続きですが、APIを叩く側はformでデータを送るのではなく、コードの中にPOSTする処理を書きます。 選択肢としては curlコマンドを使う file_get_contentsを使う …

no image

FTPソフトでのアクティブモード&パッシブモードについて

Webアプリを作る場合、基本的にSSHが使えることが前提だったんですが、先日安いサーバーでWebサイトを作る案件があり、FTPでアップをする必要に迫られました。 その時に、「ログインはできているんだけ …

no image

サーバーレスやPassについての所感など

firebaseについてここ数日ちょこちょこ触りました。一昔前はwebアプリというと、ほとんどがCentOSにapacheとMySQLを入れて・・・というパターンが大部分でしたが、2020年6月現在、 …

no image

docker上でミニサービスを起動させるまで

dockerで何とかホストOS上でサービスを起動させるところまでは終了。 Contents1 やったこと2 苦戦したこと やったこと CentOSのイメージを取得 [crayon-61e4f91d45 …

no image

ansible localでの使用,sudoに関して

最近継続的に調査しているansibleについて Contents1 local2 sudo local ansibleは通常別のホストに対して行うものですが、 hostsファイルのIPを変更し、以下の …