JScript RuntimeObject检测全局污染(3)
作者:Denis 来源:Denis'Blog 发布时间:2010-09-13 12:26:00
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中的每属性,一个全局标识符已被泄露,一个测试案例的警告就会记录下来。
猜你喜欢
- [pre]REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE[/pre][pre] tbl_name[,tb
- 在项目开发中,经常出现这样的需求。在新增或修改一个主表数据时,对应的从表也要进行同步,此时我们是怎么操作的了?典型的方法就是对于主表的各数据
- This is a {t}. {name}是一个很强大的字符串模板解析方法。它接受三个参数,分别是{args.text},{args.obj
- 在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。在这
- HTML5 越来越引起人们的关注,苹果甚至将 HTML5 视为 Flash 的掘墓人 。然而,作为一种尚未成型的技术,HTML5 对很多人来
- 游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。我们
- 平时每逢alexa排名更新时,我都需要将所有相关的同类网站的排名整理一下,看一下这些对手网站的排名更新情况。做的多了,也就烦了,虽然也才30
- 最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@&nbs
- 先看看:css中class与id的区别及应用表单的name与id其实是同一个意思,都是为了标记对象名称。它们所不同的是:name是Netsc
- 相同点: a. 两者都需要直接抓取到网页源码才能有效工作, b. 两者单位时间内会多次大量抓取被访问的网站内容; c. 宏观上来讲两者IP都
- ASP有一个最重要的功能,就是它可以让你非常轻松地连接数据库。通常都是和一个Access或者一个SQL数据库相连。因为Access是最容易起
- Oracle中有多种方法可以向数据库或服务器文件系统上载文件,这里主要介绍如下三种:Oracle HTTP Server(OHS)的mod_
- 当我们使用访问一个没有声明的变量时,JS会报错;而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量。
- parent.html 中的代码为:<iframe marginwidth="0"
- 如何制作一个搜索引擎链接程序?多收集几个网站的,然后我们引用它到自己的页面中。接下来,我们要创建页面用于搜索:<center>&
- JavaScript中没有Trim函数,VBScript语言中才有这个函数,就是去掉字符串头和尾的空格。您可以访问这篇文章:《增加 java
- W3C(万维网联盟)日前发布了HTML 5公共草案,这是10年来对HTML的一次主要升级。据国外媒体报道,W3C HTML5草案于本周二发布
- [本站原创]在我们浏览了一些网页时,经常会弹出一些信息窗口或浏览器窗口以显示一些公告内容,想知道这些窗口是怎么制作出来的吗?如果你还不曾知道
- 近日,朋友写一个关于成绩管理的系统,其中遇到一个小问题。如果按照SQLSERVER的ORDER 排序时,比如遇到两个100分,结果必然是名次
- <!-- -----------[test]表生成脚本---------------