2011-01-08 7 views
2

外部JavaScriptソースはHTMLページ内のスクリプトコンテキストで使用できますか?外部JavaScriptファイルが参照されている

<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script> 

は、現在のHTMLページ内のDOMまたはウィンドウのコンテキストから利用できるJavaScriptソース(解釈の前にコードの行)とは?私は、コンポーネントやツールをインストールしなくても標準のJavaScriptだけを使用することを意味します。

私はFirebugのようなツールを知っていますが、プラットフォームにインストールされており、ブラウザサンドボックスのコンテキスト外で特殊な機能を持つ可能性があります。

答えて

2

いいえ。 <script>タグの本当のコンテンツを読み込むためのJavascript APIはありません。実際には見落としではなく、セキュリティ機能です。.jsonファイルをGmailがAJAX経由で受信して、受信トレイを外部の<script>タグに入れてリクエストするとします。 JSON文書は有効なJavascript(副作用なしで付与されている)なので、エラーなく実行されます。その後、外部スクリプトの内容を調べることができれば、私はあなたの電子メールを読むことができます。 (私はGmailはそれよりも複雑ですが、ほとんどのサイトではないことはほぼ確実だ。)

ので、Gmailがどのように機能するかについていくつかのことを構成する、ここで攻撃がどのように見えるかです:

<script id="inbox" type="text/javascript" src="http://mail.google.com/OMGYOURINBOX.json"></script> 

<script type="text/javascript"> 
// Supposing a value called `externalScriptContent` existed on a script tag: 
var inboxJSON = document.getElementById('inbox').externalScriptContent; 
var messages = JSON.parse(inboxJSON); 
for(var i in messages) { 
    // Do something malicious with each e-mail message 
    alert(messages[i].body); 
} 
</script> 

スクリプトタグの値がexternalScriptContentだった場合は、私が望むようなURLをURLに入れて、リモートファイルの内容を呼び出すことで、AJAXのクロスオリジンの制限を事実上回避することができます。それは悪くなるだろう。リモートスクリプトは、実行されて実行されるだけなので、リモートスクリプトに対するクロスオリジン要求を許可します。彼らは読むことができません。

Firefoxの拡張機能はブラウザが要求するものを検査できるため、Firebugにはこれらの権限があります。通常のページ、ありがたいことに、しないでください。

ただし、スクリプトがあなたのドメインにある場合は、<script src="…"></script>フォームに書くのではなく、AJAXリクエストでプルすることができます。evalそれにアクセスできるようにしてください。

+0

Gmailが公開する.jsonスクリプトをリクエストできるのであれば、ソースが検査可能かどうかにかかわらずメールを読んだことがありますか?認証はこのような状況を防ぐメカニズムです。おそらく私は理論的な状況を理解していないよ。 –

+0

@John K:AJAXリクエストにはクロスオリジンのアクセス許可の要件がありますが、 'で外部スクリプトファイルへの呼び出しは行われません。 ''で召喚された外部スクリプトの内容を調べることができれば、私が望むものを 'src'として入れて読むことができ、それらのクロスオリジンを効果的に回避できます制限。 ''がこれらの要件の対象ではない理由は、ファイルが実行され、実行されるだけなので、それは読むことができません。私はちょうど私の答えで、私の誤解を招く言い訳をキャッチしたので、編集: – Matchu

+0

清算のためにありがとう。 –

1

<script>タグを解析し、jsファイルをXMLHttpRequestで再要求すると、キャッシュと現在のページの資格情報で容易に処理できます。しかし、リクエストしているスクリプトとタグ内のスクリプトが同じドメインからのものでなければ、ブラウザはこれを許可しません。

関連する問題