我们可以在客户端使用javascript(or jscript)创建xmlhttp来制作一个浏览器中的浏览器。
var xmlhttp=false;
// 由于在客户端的脚本是不受控的,我们需要捕捉区分由于浏览器类型或者版本以及安全设置引起的对象初始化失败
// javascript和jscript都有这个功能
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
//niceidea 签名留念
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp=false;
}
}
if (!xmlhttp && window.createRequest) {
try {
xmlhttp = window.createRequest();
} catch (e) {
xmlhttp=false;
}
}
//下面的情况就和服务端的没有什么区别了
xmlhttp.open("GET", url,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
alert(xmlhttp.responseText)
}
}
xmlhttp.send(null)
同样可以获取返回的http头部信息
xmlhttp.open("HEAD", url ,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
alert("File was last modified on - "+
xmlhttp.getResponseHeader("Last-Modified"))
}
}
xmlhttp.send(null)
看起来很简单,一些主要的问题是:
1、一般的浏览器都是限制跨域的访问的,最好目标url在当前页面同一域内
2、使用这个方法会加大代码编写的难度,或者产生一些预料不到的后果,在实际应用中,必须审慎使用
最后顺带说下,ie曾经的漏洞,加上xmlhttp,可以使浏览器中的脚本访问本地资源......有点寒,如果浏览器中的脚本以系统某个组的权限访问本地数据,然后提交到服务端,那么整个经过就看起来和一般的木马程序没有什么区别。