我做了什么:
我用 xss.js 创建了一个 index.html,它调用了 jQuery.get() 函数。然后我在浏览器(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:没有答案
铬:
XMLHttpRequest cannot load http://www.example.com/. Origin null is not allowed by Access-Control-Allow-Origin.
Opera
HTTP/1.1 200 OK
:没有错误代码(
此代码将加载index.html
到我的 Android WebView 中:
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;博士 - 问题:
为什么可以将内容从远程服务器加载到我的移动设备 - 这不是跨域脚本的情况还是我遗漏了什么?
由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。
另外:为什么 Opera 收到答案但没有显示任何内容?
提前致谢。