いいえ。 <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
それにアクセスできるようにしてください。
Gmailが公開する.jsonスクリプトをリクエストできるのであれば、ソースが検査可能かどうかにかかわらずメールを読んだことがありますか?認証はこのような状況を防ぐメカニズムです。おそらく私は理論的な状況を理解していないよ。 –
@John K:AJAXリクエストにはクロスオリジンのアクセス許可の要件がありますが、 'で外部スクリプトファイルへの呼び出しは行われません。 ''で召喚された外部スクリプトの内容を調べることができれば、私が望むものを 'src'として入れて読むことができ、それらのクロスオリジンを効果的に回避できます制限。 ''がこれらの要件の対象ではない理由は、ファイルが実行され、実行されるだけなので、それは読むことができません。私はちょうど私の答えで、私の誤解を招く言い訳をキャッチしたので、編集: – Matchu
清算のためにありがとう。 –