私がしたこと:
jQuery.get()関数を呼び出すxss.jsを使用してindex.htmlを作成しました。次に、ブラウザ(Firefox、Chrome、IE、Opera)でindex.htmlを開き、ajaxリクエストをトリガーしようとしました。
コード
これが私のindex.htmlです:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS</title>
<script src="libs/js/jquery-1.7.2.js" ></script>
</head>
<body>
<button id="request" >fire</button>
<script src="libs/js/xss.js" ></script>
</body>
</html>
と私のxss.js:
function init()
{
$('#request').click(loadContent);
}
function loadContent()
{
$.get('http://www.example.com/', null, function(data){
alert('success');
$('body').html(data);
}, 'html');
}
init();
index.html
ブラウザ()内で開くとfile:///C:/workspace/xss%20test/index.html
、ボタンをクリックすると次の応答が返されます。
Firefox:エラーコード(
HTTP/1.1 200 OK
)はありませんが、答えは空ですIE:無回答
Chrome:
XMLHttpRequest cannot load http://www.example.com/. Origin null is not allowed by Access-Control-Allow-Origin.
Opera:エラーコード(
HTTP/1.1 200 OK
)はなく、完全なhtmlファイルが回答として表示されますが、何も表示されません(成功コールバックはトリガーされません)
このコードはindex.html
私のAndroidWebViewにロードされます:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.setWebViewClient(new WebViewClient());
webview.loadUrl("file:///android_asset/www/index.html");
}
}
ボタンがトリガーされた後、成功コールバックを呼び出し、ファイルwww.example.com
の本文にの内容も表示します。index.html
(iPhoneデバイスでも同じことが可能です。これはWindows Phoneデバイスではテストしていません)。
tl; dr-質問:
リモートサーバーからモバイルデバイスにコンテンツをロードできるのはなぜですか?これはクロスドメインスクリプティングの場合ではないのですか、それとも何かが足りないのですか?
ブラウザのセキュリティ制限により、ほとんどの「Ajax」リクエストには同一生成元ポリシーが適用されます。リクエストは、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。
また、Operaが回答を受け取っても何も表示されないのはなぜですか?
前もって感謝します。