• 締切済み

JavaScript クロスドメインのリスク

JavaScriptを使用したweb設計・開発をしています。3点質問いたします。 質問1 素朴な疑問なのですが、一般のwebサイト(接続元)からXMLHttpRequestやajaxを利用して他ドメイン(接続先)のデータが取得できないのはブラウザのセキュリティ上の制約だそうですが、セキュリティ上どのような問題があるのか具体例を教えてください。なお、ローカルファイルへのアクセスの問題点は承知しておりますので質問の範囲ではありません。 例示するような問題が考えられると思うのですが、次の理由によりいまいち納得できません。 ・接続先の認証済クッキーを使用し接続先のデータを接続元が読み取ることが出来る →ブラウザの仕様を修正し、クロスドメインへのhttpリクエストの際にクッキー情報を付与しないあるいは付与の可否をユーザーが選択できるようにすれば問題無いのでは?何故それが出来ない? ・偽装サイトを作れる→iframeもあるしそもそも静的なwebサイトは容易に複製できる ・他サイトへのDoS攻撃になる→imgやjsは普通にクロスドメインで取得し使用できる。また、firefoxのXMLHttpRequestの通信を解析するとどんな形式のファイルの要求であってもレスポンスは一応返ってきているようであり、ブラウザが受信したデータを弾いているだけなので接続先へアクセスしていることに変わりない。 ・Same-origin policyに反する→反すると何が問題なのか。JSONPなどは例外的な動作が認められているがそれらの例外以外は認められないのは何故か。 質問2 最新バージョンのfirefoxで、引数を付けて起動する、about:config等デフォルトの機能のみで権限を昇格し、クロスドメイン制約を回避する方法があれば教えてください。または、クロスドメイン制約を回避するだけの単一の機能を持ったアドオンがあれば教えてください。(Greasemonkeyは一般の人に使用してもらうにはセキュリティ上の懸念があります) 質問3 ブラウザの利用者の同意の元webサイトのクロスドメイン制約を回避するfirefoxアドオンの作成・配布は問題無いと考えられますでしょうか。それともウィルス作成と同様倫理上非難される行為なのでしょうか。問題だとするなら何が問題と考えられているのでしょうか。(JSONP等の代替技術のご提示は結構です) 個別の質問だと質問の意図が伝わりにくいと思いましたので、まとめて質問させていただきました。分かる範囲で構いませんので、ご回答宜しくお願い致します。

みんなの回答

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

単純に偽のサイトを考えたとき、iframeとは違ってスクリプトが改ざんしたり情報を抜き取ったりできます。

  • t_ohta
  • ベストアンサー率38% (5083/13282)
回答No.1

質問1について サイトの改ざんや広告、ウィジェットのようなものを使って悪意のあるJavaScriptが埋め込まれた場合、キーロガーのようなスクリプトを仕込まれて第三者にパスワードやクレジットカード番号など重要な情報を盗まれたり、ログインしている人物しか見られないはずの個人情報や機密情報を外部に送信できる可能性があるので、同一生成元ポリシーという考えのもと制限されています。 質問2については知見が無いのでパス 質問3について 利用者が全てのリスクについて理解できるのであれば問題無いと思いますが、利用者の多くはリスクについて理解できないまま、第三者の誘導でアドオンをインストールしてしまい重要な情報を盗まれる危険に晒されることになるので、悪意のある機能とみなされる可能性が高いと思います。

関連するQ&A

  • クロスドメインのjsonpをjqueryで取得

    現在jsonpでクロスドメイン間の通信を行おうとしています。 サイトにあるjsonpは下記のような形です。 articles({"articles_cnt":"2","article":[{"kind":"newhouse","no":"1"},{"kind":"newhouse","no":"1"}]}) このkindとnoを取得するにはどうすればいいでしょうか? どなたかご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • 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の文字数制限でエラーになってしまいます。 どれは一つでもおわかりでしたらお教え下さい。 よろしくお願い致します。

  • [html]クロスドメインのストリームを張り付ける

    mjpg-streamerを利用して、定点カメラで撮影している動画を ストリーム配信しています。 mjpg-streamerは8080番ポートで動作中で、 <http://xxx:8080/?action=stream>で動画が参照できます。 同一ノード上の80番ポートでウェブサーバが稼働しており、 そのhtmlページにmjpg-streamerのストリーム動画を張り付けたいです。 <img src="http://xxx:8080/?action=stream" /> で張り付けたところ、スマホのchromeからは動画が確認できましたが、 PCのchromeでは表示できません。デバッガ上には以下のメッセージが出ています。 GET http://xxx:8080/?action=stream net::ERR_CONNECTION_REFUSED 同一ノードとはいえ、ポートが違うのでクロスドメインと判定され、 接続拒否されているものと思います。 ボタンクリック等の際にクロスドメインのjavascriptからデータ取得等を行う場合には、jsonpやjquery.xdomainajax.jsを利用することで回避していますが、 streamを埋め込む場合にはどのようにすればよいのか分からず困っています。 解決方法が分かる方、教えてください。

    • ベストアンサー
    • AJAX
  • クロスブラウザ

    HTML4.01,PHP5,javascript,CSS2,MySQL5 これらを使って、webサイトを作成しました。 FireFoxで検証し動作OK,となったところでブラウザをIE6に変えてみました。 そうすると、javascriptはエラーが出ていないにも関わらず、CSSは崩れてるわ、MySQLからデータは抽出できてないわ、という大変なことになっております。 非同期通信等でのクロスブラウザ対策は以下です。 XMLHttpRequest(),ActivXObject("Microsoft.XMLHTTP") addEventListener,attachEvent 何か他にしなければならないことがあるのでしょうか? ちなみにFireFoxのjavascriptコンソールにはエラーはありません。 情報が足りないと思いますが、ソースコードを全部ここに書いても意味ないと思いますので・・・ どなたかアドバイスありましたらお願いいたします。

  • クロスドメインの制限

    クロスドメインの制限について教えてください。 クロスドメインの制限(ブロック?)をしているのはJavaScriptなのでしょうか?それともブラウザなのでしょうか? またはブラウザのプラグイン(dll)としてJavaScriptを使用している関係上その両方という事になるのでしょうか? JavaScriptと書いている個人ページもあればブラウザと書いているページもあるので困惑しています。 xmlhttpreqest(綴りが違うかもしれません)で制限とは言っても、あくまでデータを取得後にブラウザで制御しているのか取得時に制御しているのか良く分かりません。 (そもそもhttp通信等について詳しくないのが自分の問題だとは思いますが・・・) 言いたいことがうまく伝わるかわかりませんが、宜しくお願いします。

  • クロスドメインでのサーバ書き込みについて

    javascriptによるクロスドメインアクセス手法として、AjaxやXMLHttpRequestといった技術がありますが、これを利用することで、「サーバAから提供されたJavascriptを実行してサーバBのファイルに書き込む」といった処理も可能になるのでしょうか? やりたいことは、顧客のサーバAに導入したシステムからWEB画面を提供し、 WEBから送信される特定の情報のみ、自社で管理しているサーバBに集約する、ということです。

  • クロスドメインに関して

    ウェブシステム製作中にクロスドメインで悩んでいます(VisualStudio2010を使っています)。 【仕様】 1.Domain-AのA画面からDomain-BのB画面のiFrameにPostMesssageでデータを送信します。 2.Domain-BではiFrameからDomain-AからPostMessageされたデータより,Domain-Bの画面Cをwindow.openで開きます。 3.画面Cで入力したデータをDomain-BのB画面に返します。 4.画面Bが受け取ったデータをDomain-AのA画面に返します。 このうちの3.から先が上手く動きません。3.の工程で,画面Cから画面BのiFrameにデータを渡したいのですが,どうも上手く行きません。 スタンドアロンでは「parent.window.opener」にて画面Cで入力したデータをDomain-BのB画面に上手く返せてたのですが,クロスドメインでは,どのようにデータのやるとりを擦ればいいのでしょうか? どうかご教示お願いいたします。

  • javascriptでのhttp通信について

    現在よく利用するサイトを見やすくしようという目的でjavascriptでのHTMLソースの取得に挑戦しています。 ファイルの使用環境はデスクトップに以下のHTMLファイルを作成し、firefox9.0.1で開いています。 ↓ここからhtmlファイル ------------------------------------------------ <html> <head> <script> var HTTP={} function getSource(){ var request=new XMLHttpRequest(); request.open("GET","http://www.○○○",false); request.send(null); if(requset.status==200){ document.getElementById("source").value = request.responseText; } else{ alert("Error"); } } </script> </head> <body> <button onclick="getSource()">ソースを取得</button><br/> <textarea id="source" style="width: 100%;height: 300px;"></textarea> </body> </html> ------------------------------------------------ ↑ここまで このようなファイルを実行し、firebugでエラーを表示したときの画像を添付します。 ご覧のようにエラーコード0x80004005が出力されています。 コレについて調べているうちにどうやらjavascriptでは他のドメインにあるソースを取得する クロスドメインが制限されているということでした。 しかし、ロケーションプロパティを使用した以下のプログラムではしっかりとページを表示することが出来ました。 ↓ここからhtmlファイル ------------------------------------------------ <script> document.location="http://www.○○○" </script> ------------------------------------------------ ↑ここまで これは確かではありませんが、どうやらこのlocationプロパティを使った場合もHTTP通信を行っているようです。これはクロスドメイン通信にならないのでしょうか? クロスドメインを回避する方法はいくつか紹介されていましたが、この点を理解せずに次に進む気がせず、またもしXMLHttpRequestを使用してクロスドメインを取得する方法があればご教授いただきたいと思い質問をさせていただきました。 最後に質問のほうをまとめさせて頂くと 1.プログラムコードに誤りは無いか? 2.locationプロパティは如何にして他のドメインのソースを取得しているのか?、またそれはXMLHttpRequestを使用した場合と違うのか? 3.結局のところこの方法でページのソースは取得できるのか?、もし出来ないのなら他にどのような方法があるのか? となります。少し欲張りな感じにまとまってしまいましたwwどれか一つだけでもいいのでご回答よろしくお願いします。

  • 単一IPアドレスで複数ドメイン管理のリスクについて

    初歩的な質問かもしれませんが、色々と調べてもなお明確な答えが得られなかったため、質問刺させていただきます。 単一IP(固定IPアドレス)で複数のドメイン(違法性のない内容の違うサイト)を運用・管理するリスクはありますでしょうか? 上司が言うには、 ・多数のIPアドレスを取得して、それぞれのWEBサイトをSSLで運用するのは維持費がかかりすぎる。 ・固定IPアドレスを増設してもらうにもコストがかかりすぎる。 上記2点の解決策として、コストを下げるため、単一IPアドレスで複数のWEBサイトを運用・管理したい。 とのことでした。 ・単一IPで複数ドメインとなるとSEO的にも芳しくないらしい。 ・セキュリティ的に一つのドメインだと、一つのサイトがハッキングや改竄に合うと、他のサイトも同様に影響を受けやすいらしい。 というような話も聞きます。 ただどれも明確な回答ではなく、「らしい。」と言われてしまうので、そういったリスクについて詳しい方からのご回答をいただけないでしょうか。 「○○だから××で、単一IP(サーバー)で複数のドメインを管理するのは危険だ。」 という明確なご回答をお待ちしています。 宜しくお願いします。

  • サブドメインが見れなくなる

    CentOSで自宅サーバーを立ち上げています。 通常のメインドメイン以外にバーチャルホストで サブドメインを作りました。 しかし、週に2、3回、夜になるとサブドメインのサイトだけ、 WEBブラウザから見る事が出来なくなります。 大概、朝になると見えるようになっています。 メインのドメインはまったく問題ありません。 DNS的な問題なのかな?とは思っていますが、 週に2、3回(不定期)だったり、夜だけだったりしているので、 正直、何が起きているのか解らず、どこから対処して良いのか わからない状態です。 推測程度で構わないので、心当りがありましたら、 ご教授ください。宜しくお願いいたします。

専門家に質問してみよう