セキュリティ クロスサイトスクリプティング(XSS)とUTF-7
スポンサーリンク
クロスサイトスクリプティングは、Webアプリケーションセキュリティで非常に驚異です。
UTF-7とは?
UTF-16は、BMP(基本多言語面)を16ビット、その他を#サロゲートペアの仕組みを用いて32ビットで指定する方式をとります。リトルエンディアンとビッグエンディアンのUTF-16がありUTF-16LE, UTF-16BE, と区別することもあります。
UTF-7は、UTF-16 の Unicode を Base64
に変換し、表す方式です。ただし、ASCIIのアルファベットの文字は、Base64に変換しません。7ビット単位でしかデータを扱えない通信方式なので利用することを想定されたものです。
UTF-7で表すと
メタキャラクタ < >" が違う表現で表すことができます。
UTF-7とクロスサイトスクリプティング
charsetが不明瞭なWebアプリケーションを攻撃します。
ブラウザに UTF-7 だと認識させます。
charsetが不明瞭というのは、
MicrosoftのInternet Explorer6の文字コードが自動判定の場合に動作します。
metaタグでcharsetが指定してあったとしても、それよりも前にUTF-7の文字コードを挿入することで、指定されたmetaタグを無効化することができます。これもMicrosoftのInternet Explorer 6で動作します。
対策方法
UTF-7とは?
UTF-16は、BMP(基本多言語面)を16ビット、その他を#サロゲートペアの仕組みを用いて32ビットで指定する方式をとります。リトルエンディアンとビッグエンディアンのUTF-16がありUTF-16LE, UTF-16BE, と区別することもあります。
UTF-7は、UTF-16 の Unicode を Base64
に変換し、表す方式です。ただし、ASCIIのアルファベットの文字は、Base64に変換しません。7ビット単位でしかデータを扱えない通信方式なので利用することを想定されたものです。
XSSはクロスサイトスクリプティング
をUTF-7で表すと
XSS+MG8wrzDtMLkwtTCkMMgwuTCvMOow1zDGMKMw8zCw
とエンコードされます。
タグの例です。
<h1>XSS</h1>
はUTF-7で表すと
+ADw-h1+AD4-XSS+ADw-/h1+AD4
HTMLソースを
<html> <head> <title>XSS</title> </head> <body> <div>Security</div> </body> </html>
UTF-7で表すと
+ADw-html+AD4 +ADw-head+AD4 +ADw-title+AD4-XSS+ADw-/title+AD4 +ADw-/head+AD4 +ADw-body+AD4 +ADw-div+AD4-Security+ADw-/div+AD4 +ADw-/body+AD4 +ADw-/html+AD4
<input type="text" name="login" value=""> <input type="passwd" name="passwd" value="">は
+ADw-input type+AD0AIg-text+ACI name+AD0AIg-login+ACI value+AD0AIgAiAD4 +ADw-input type+AD0AIg-passwd+ACI name+AD0AIg-passwd+ACI value+AD0AIgAiAD4となります。
メタキャラクタ < >" が違う表現で表すことができます。
UTF-7とクロスサイトスクリプティング
charsetが不明瞭なWebアプリケーションを攻撃します。
ブラウザに UTF-7 だと認識させます。
charsetが不明瞭というのは、
- HTTPレスポンスヘッダでcharsetが指定されていない
- metaタグでcharsetが指定されていない charsetの指定がない場合のことをいいます。
Content-Type: text/html; charset=エンコーディング名
下記のようにHTMLのメタタグでcharsetを指定していない。
<meta http-equiv="Content-Type" content="文字コード...
charsetをUTF-7で認識させる方法
- エンコードの自動判別機能
MicrosoftのInternet Explorer6の文字コードが自動判定の場合に動作します。
<html> <head> <title>XSS</title> </head> <body> <div>+ADw-script+AD4-alert('xss')+ADw-/script+AD4</div> </body> </html>UTF-7と認識され、divでかこまれたスクリプトが実行されます。
metaタグでcharsetが指定してあったとしても、それよりも前にUTF-7の文字コードを挿入することで、指定されたmetaタグを無効化することができます。これもMicrosoftのInternet Explorer 6で動作します。
<html> <head> <title>+ADw-/title+AD4- +ADw-meta http-equiv+AD0-'content-type' content+AD0-'text/html+ADs-charset+AD0-utf-7'+AD4- </title> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> </head> <body> <div>+ADw-script+AD4-alert('xss')+ADw-/script+AD4</div> <div>utf-7</div> </body> </html>
対策方法
- charsetをHTTPレスポンスヘッダに含める
- metaタグでcharsetを指定するよりも前にユーザ(攻撃者)の入力が入らないHTMLソースにする
- charsetはブラウザが理解できるものを指定する。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12