JavaScript在web2.0时代已经成为越来越重要的一种脚本语言,但是JavaScript在浏览器里面的交互能力也是互联网web网页安全的一大隐患。Google公司的Ben Laurie发起了一个Caja项目,旨在制订一个JavaScript语言的子集和最佳编程指导方针,约束JavaScript程序员编写的代码,符合一个更加安全,更加合理的JS代码。

解决方案 »

  1.   

    JavaScript在web2.0时代已经成为越来越重要的一种脚本语言,但是JavaScript在浏览器里面的交互能力也是互联网web网页安全的一大隐患。Google公司的Ben Laurie发起了一个Caja项目,旨在制订一个JavaScript语言的子集和最佳编程指导方针,约束JavaScript程序员编写的代码,符合一个更加安全,更加合理的JS代码。 该项目的主页是: http://code.google.com/p/google-caja/ 即便对Caja未必非常感兴趣,我也建议你看看他的wiki,对于如何编写良好风格的JS很有帮助: http://code.google.com/p/google-caja/w/list
      

  2.   

    Java代码 
    function Brand(name) {   
        caja.requireType(name,'string');   
        var flag = false;   
        var squirrel = null;   
      
        var sealer = caja.freeze({   
            toString: function() { return '<'+name+' sealer>'; },   
      
            /** Returns a sealed box containing the payload. */  
            seal: function(payload) {   
      
                /**   
                 * Encapsulates the payload, but makes it available to its  
                 * unsealer when provoked.  
                 */  
                return caja.freeze({   
                    toString: function() { return '<'+name+' box>'; },   
                    provoke: function() {   
                        squirrel = payload;   
                        flag = true;   
                    }   
                });   
            }   
        });   
      
        var unsealer = caja.freeze({   
            toString: function() { return '<'+name+' unsealer>'; },   
      
            /**  
             * Obtains the payload sealed within a box sealer only by our sealer.  
             */  
            unseal: function(box) {   
                flag = false;    
                squirrel = null;   
                box.provoke();   
                caja.require(flag,'not my box: '+box);   
                var result = squirrel;   
                // next two lines are probably unneeded, but just in case   
                flag = false;    
                squirrel = null;   
                return result;   
            }   
        });   
        return caja.freeze({   
            toString: function() { return '<'+name+' brand>'; },   
            sealer: sealer,   
            unsealer: unsealer   
        });   
    }