网络编程
位置:首页>> 网络编程>> JavaScript>> JScript RuntimeObject检测全局污染(3)

JScript RuntimeObject检测全局污染(3)

作者:Denis 来源:Denis'Blog 发布时间:2010-09-13 12:26:00 

标签:JScript,RuntimeObject,IE

IE elerts

function foo.bar(){}
false

在除了IE的浏览器中运行JScript,在解析JScriptFunction 的FunctionBindingList时会如期地抛出SyntaxError(语法错误)。这是意料之中的,因为它是一个语法扩展。

书签

javascript:(function() {var ro=RuntimeObject(),r=[],i=0,p;for(p in ro){r[i++]=p;}alert('leaked:\n'+r.join('\n'));})();

JScript语法扩展

在较早的”查找由FunctionBindingList创建的标识符”的例子中提到过JScript扩展--JScriptFunction。这个名字不是一个破绽,它是JScript语言的扩展,JScriptFunction 如下:

JScriptFunction :
function FunctionBindingList ( FormalParameterListopt ) { FunctionBody }
RuntimeObject(filterString): The filterString Parameter
RuntimeObject

方法接受一个可选的过滤字符去匹配标识符。遗憾的是,filterString 不能转换成正则表达式,而是用可选的leftWild和rightWild来进行子匹配默认为”*“。

这意味着filterString = “a*” 将匹配标识符a和a1,而不是ba 。

结论

抛开文档的bug和缺点来说,RuntimeObject 提供了一个有用的替代方案来解决JScript中枚举全局属性的问题。RuntimeObject的优点在于它仅包括用户定义的属性,全局的window属性除外。

前面提到的书签提供了一个简便的方法去查看一个页面中不经意间创建的全局属性(它也表明这个站点也不是全局对象保持清洁的光辉典范)。

RuntimeObject的其它应用

跨浏览器标识泄露书签

相对于IE中标识泄露检测,写一个跨浏览器标识泄露检测是下一个逻辑步骤。

自动标识符泄露检测

意外的全局标识符检测应该是自动匹配的。

YUI Test 的单元测试框架为TEST_CASE_BEGIN_EVENT 和TEST_CASE_COMPLETE_EVENT 提供了钩子。这些事件用来检测RuntimeObject,并在程序代码运行期间捕捉泄露的标识符。

在TEST_CASE_BEGIN_EVENT 中检测RuntimeObject 并存储结果。在TEST_CASE_COMPLETE_EVENT中再次检测RuntimeObject 并与TEST_CASE_BEGIN_EVENT中存储的结果比较。接下来,对于每一个出现在TEST_CASE_COMPLETE_EVENT中而并没有出现在TEST_CASE_BEGIN_EVENT中的每属性,一个全局标识符已被泄露,一个测试案例的警告就会记录下来。

英文原文:http://dhtmlkitchen.com/?category=/Browsers/&date=2010/04/11/&entry=Detecting-Global-Pollution-with-the-JScript-RuntimeObject

译文:http://www.denisdeng.com/?p=1043

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com