★阿修羅♪ 現在地 HOME > 掲示板 > IT6 > 665.html
 ★阿修羅♪
次へ 前へ
セキュアなWeb構築の秘訣〜クロスサイトスクリプティングは思わぬ個所に巣食っている(8)〜
http://www.asyura2.com/0406/it06/msg/665.html
投稿者 クエスチョン 日時 2004 年 10 月 27 日 07:29:16:WmYnAkBebEg4M
 

(回答先: セキュアなWeb構築の秘訣〜クロスサイトスクリプティングは思わぬ個所に巣食っている(7)〜 投稿者 クエスチョン 日時 2004 年 10 月 20 日 07:12:42)

セキュアなWeb構築の秘訣〜クロスサイトスクリプティングは思わぬ個所に巣食っている(8)〜
http://itpro.nikkeibp.co.jp/members/NBY/Security/20040809/148390/

[2004/10/26] バックナンバー

自動生成するJavaScript対策
佐名木 智貴
日経ネットワークセキュリティ「自己防衛マニュアル」(2003年8月発行),156ページより
この連載のほかの回を読む

(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

自動生成するJavaScript対策


リスト2●ユーザーの入力値を制御できないWebページの例


図5●リスト2のWebページが悪用され得る理由
Webブラウザからスクリプト送ると(左),それがそのまま動く(右)


写真14●写真9の例でJavaScriptのエスケープ処理をしたところ
入力データを変数の値として使う場合に,入力された「’」「”」「¥」をエスケープすることがセキュリティ対策となる


写真15●HTMLエンコードも効果はあるが文字化けが発生する


写真16●数字のデータとして利用する場合はJavaScriptのエスケープ処理は効果がない


リスト3●写真16のソースコード


リスト4●リスト3に対策を施したコード。
Webブラウザから渡されるクエリー文字列の値が数値かどうかのチェックを1行目のIsNUmeric関数が行っている


写真17●リスト4のWebページに不正なクエリー文字列を入力したところ

 では,クライアント側スクリプトに対して,どのような無効化処理やエスケープ処理が有効なのかを考えていこう。その前に,注意してほしいのは,以下で述べるセキュリティ対策は,あくまで変数の初期値として利用する場合に限定されているということである。

 例えば,リスト2[拡大表示] のようなWebページを考えてみよう。リスト2を見れば分かるが,Webブラウザからポストされる「cCode」という値が,test関数の内部処理となるように設計されている。しかし,このプログラムを作成したプログラマの想定したコードだけが送られてくるわけではなく,Webブラウザから与えられるデータは,いかようにも書き換えが可能だ。このことは説明済みである。つまり,リスト2では任意のデータを送り込むことができ,それがクライアント側のコードとして実行される(図5[拡大表示])。これを防ぐ手立てはないと言ってもよいだろう。ということで、ここでの対策方法の話は、あくまでも変数の初期化の値として利用する場合に限定していることに注意してほしい。

 クライアント側スクリプトの代表はJavaScriptだろう。JavaScriptでのエスケープ処理は,以下のようになる。

「’」→「¥’」
「”」→「¥”
「¥」→「¥¥」

 Webブラウザから渡されるデータをクライアント側スクリプトの変数の初期値として利用する場合,上記のようなエスケープ処理を実施することで,この部分のクロスサイト・スクリプティング問題を回避することができる。クエリー文字列に前述した不正なコードを入力しても,「’」を「¥’」に置換することにより,スクリプト・コードが動作しなくなる(写真14[拡大表示])。

 Webや書籍では,クロスサイト・スクリプティング問題の対策として,「”」を「"」,「’」を「'」に置換する方法を紹介している場合が多い。この対策も有効ではある。しかしこの対策だと,写真15[拡大表示]のようにクエリー文字列に「sanaki’」という値を入力すると,文字化けが発生する。前述のエスケープ処理なら,文字化けすることなくデータを扱えるようになる。

 では,数値として利用する場合はどうだろうか。クライアント側のJavaScriptであっても,数字については「’」や「”」で囲む必要は必ずしもない。データの先頭と最後を「’」や「”」という文字で特定するわけではなく,上記のエスケープ処理は効果を持たなくなる(写真16[拡大表示],リスト3[拡大表示])。

 ということになれば,Webブラウザから渡されるデータをこのような個所で用いる場合は,数値かどうかを判断する必要があるだろう(リスト4[拡大表示],写真17[拡大表示])。
*            *            *

 今回は,プログラム例や不正行為例の紹介よりも説明が多くなってしまった。クロスサイト・スクリプティング問題で大切なのは,「クロスサイト」「スクリプティング」という名前(カタカナ)に惑わされないこと。適用範囲がSI業者の開発した独自のWebアプリケーションからWebサーバーまで広範囲だと認識すること。この問題の本質は,あなたと関係のない第三者が,あなたのWebサイト/WebアプリケーションのHTML出力を書き換え可能だということである。さらにあまり紹介されていないクライアント側スクリプトを動的に生成する場合の注意点が伝われば,筆者としては幸せである。

佐名木 智貴 Sanaki Tomoki

筆者はインターナショナル・ネットワーク・セキュリティに勤務。技術本部に所属している。システムのセキュリティ・ホールの検査を専門とし,システム開発のセキュリティ問題に詳しい。

 次へ  前へ

IT6掲示板へ



フォローアップ:


 

 

 

  拍手はせず、拍手一覧を見る


★登録無しでコメント可能。今すぐ反映 通常 |動画・ツイッター等 |htmltag可(熟練者向)
タグCheck |タグに'だけを使っている場合のcheck |checkしない)(各説明

←ペンネーム新規登録ならチェック)
↓ペンネーム(2023/11/26から必須)

↓パスワード(ペンネームに必須)

(ペンネームとパスワードは初回使用で記録、次回以降にチェック。パスワードはメモすべし。)
↓画像認証
( 上画像文字を入力)
ルール確認&失敗対策
画像の URL (任意):
投稿コメント全ログ  コメント即時配信  スレ建て依頼  削除コメント確認方法
★阿修羅♪ http://www.asyura2.com/  since 1995
 題名には必ず「阿修羅さんへ」と記述してください。
掲示板,MLを含むこのサイトすべての
一切の引用、転載、リンクを許可いたします。確認メールは不要です。
引用元リンクを表示してください。