LoginSignup
5
8

More than 5 years have passed since last update.

クロスサイトスクリプティングってなんだ

Last updated at Posted at 2018-05-01

魔法の言葉:クロスサイトスクリプティング

「クロスサイトのテストやって」との上司指示。
「承知しました!」・・・知らんけど。

ってことで、まとめサイトをググってみた。

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

  • セキュリティホールの一種
  • HTTPレスポンスに埋め込まれたJavascriptやタグにより、ブラウザ側に誤動作を行わせる
  • 略称:XSS

具体例

  • サイト利用者のCookie情報や入力情報が盗まれる

ブラウザ仕様の注意点

  • IEのデフォルト設定では拡張子ではなく、ファイルの内容によってファイルタイプを決定する。HTTPレスポンスのContent-Typeがimage/bmpであり、かつ拡張子がbmpであっても、ファイルの内容がHTMLであれば、HTMLと判断し、スクリプトが実行される。

対策

  • スクリプトを埋め込む必要がない箇所には、登録自体を禁止、または受け渡しを禁止する
  • タグを無効化してから表示する
  • aタグのリンクに入力データを使用したい場合、URLを絶対パスで記述する
  • スクリプトのコード内には入力データをなるべく使用しない
  • TMLで特別な意味を持つデータである「<」「>」「"」「'」「&」をそれぞれ、「<」「>」「"」「'」「&」に変換する
  • IEはファイルアップロードが可能なアプリケーションの場合、ファイルの内容にHTMLタグが含まれていないことなどアップロードしても安全なファイルであことを確認する仕様にする

テストをする前に

何が不具合と認識されるのか調べる

サイトポリシーを参照して、何が不具合に当たるのかを確認する。
- 例1. 入力OKだが表示は無効
- 例2. 入力自体が禁止
- 例3. 機能的にHTMLは入力OK

テスト方法・其の1

手段 1
1. URLパラメータに、スクリプトを指定してアクセスしてみる
2. スクリプトが無効化されているか確認する

手段 2
1. 入力ホーム欄にスクリプトを入力して処理してみる
(例えば<ahref=’http://attack’>attack<\/a>と入力して登録)
2. 入力内容を表示するページへ遷移し、スクリプトが無効化されているか確認する。
(例えば"attack"がリンク表示されていれば NG)

テストデータ例・其の1

<!-- シングルクォートを利用したケース -->
   >>'<script>alert('Test')</script>

<!-- ダブルクォートを利用したケース -->
  >"><script>alert("Test")</script>

<!-- IMGタグのsrc属性にJavascriptを利用したケース -->
  >"><img src="javascript:alert('Test')">

<!-- IE限定でstyle属性を利用したケース -->
  " style = "background:url(javascript:alert('Test'))" OA="

<!-- Javascriptに入力データを動的に埋め込むケース -->
  '+ alert('Test') +'

テスト方法・其の二

Hiddenフィールドやセレクトボッックス、ラジオボタンの脆弱性チェック
→ HTTPリクエストを変更できるプロキシを利用

  1. ブラウザのプロキシ設定で以下を設定
    ・ プロキシサーバ:localhost
    ・ ポート番号:8080
  2. HTTP Proxyが転送するHTTPリクエスト/レスポンス処理方法を「Manual」に設定
    → 受け取ったHTTPリクエストをHTTP Proxyで受け、内容を変更してサーバへ転送が可能になる
  3. 受け取ったリクエスト/レスポンスを変更して送信
    ・ 入力するパラメータ値はテスト其の1を参照

参考
https://japan.zdnet.com/article/20360061/2/

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8