JScript RuntimeObject检测全局污染(2)
作者:Denis 来源:Denis'Blog 发布时间:2010-09-13 12:26:00
枚举方案:JScript RuntimeObject
使用JScript RuntimeObject方法枚举全局属性与枚举全局对象不同,你将使用一个正常的执行,枚举由全局RuntimeObject方法返回的一个对象。
var GLOBAL_VAR1,
GLOBAL_VAR2,
GLOBAL_VAR3 = 1;
GLOBAL_PROP1 = 12;
function GLOBAL_FUNCTION(){}
if(this.RuntimeObject){
void function() {
var ro = RuntimeObject(),
results = [],
prop;
for(prop in ro) {
results.push(prop);
}
alert("leaked:\n" + results.join("\n"));
}();
}
IE中的结果
在IE8和其它较低版本中,结果包括GLOBAL_FUNCTION,GLOBAL_VAR3,
GLOBAL_PROP1 (除此之外,还包括window)。
注意GLOBAL_VAR1 和GLOBAL_VAR2
并不包含其中。看来RuntimeObject并不收集未被赋值的任何变量,根据微软的文档,这不是指定的行为(以下有更多这方面的信息)。
微软的RuntimeObject文档
RuntimeObject是JScript 内置的扩展,JScript定义了七个附加的内置全局方法:
ScriptEngine,ScriptEngineBuildVersion,
ScriptEngineMajorVersion,
ScriptEngineMinorVersion,CollectGarbage,RuntimeObject和GetObject。
这些对象都是本地JScript对象,不要与宿主对象混淆。
对于RuntimeObject,微软的JScript扩展MS-ES3EX声明如下:
RuntimeObject用来寻找一个全局变量的属性,这些带有名称的属性匹配特定的模式。这个函数只寻找全局对象中通过VariableStatement 或 FunctionDeclaration方式显式创建的属性,或是位于运算符左侧作为标识符隐式创建的属性。不能寻找通过访问全局对象显式创建的属性。
粗略的测试结果表明微软的文档是不靠谱的。
返回的对象不包括添加到变量对象之上的所有标识符,只是那些被赋值的标识符。无论它们是通过VariableDeclaration,FunctionDeclaration来创建,还是作为全局属性声明来创建都无关紧要。
查找通过FunctionBindingList创建的标识符示例
在JScriptFunction的FunctionBindingList中,所有标识符将成为包含的变量对象的属性,如:
var foo = {}
(function(){ function foo.bar, baz(){} })();
ro = RuntimeObject();
alert([ro.foo.bar, "undef" in ro].join("\n"));


猜你喜欢
- 最近自己在抢冰墩墩钥匙扣,发现一秒瞬间就没了。于是自己网上学习了一下,写了一个抢购脚本。亲测可用。具体使用步骤如下:一、官网下载火狐浏览器二
- python语句与语法1.python简单语句的基本介绍>>> while True: #简单的while循环... re
- 最近迷上了Python,要说为什么呢?Python语法简单,功能强大,有广泛的第三方库能快速编程实现自己的想法(无需重复去造轮子)。就像某位
- 对于显存不充足的炼丹研究者来说,弄清楚Pytorch显存的分配机制是很有必要的。下面直接通过实验来推出Pytorch显存的分配过程。实验实验
- 什么是pyc文件pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有
- 本文结合OpenCV官方样例,对官方样例中的代码进行修改,使其能够正常运行,并对自己采集的数据进行实验和讲解。一、准备OpenCV使用棋盘格
- 损失函数通过torch.nn包实现,1 基本用法criterion = LossCriterion() #构造函数有自己的参数loss =
- 本文实例讲述了GO语言make()分配用法。分享给大家供大家参考。具体分析如下:make()分配:内部函数 make(T, args) 的服
- ASP里两种常用的生成文件的方式是:利用ADODB.Stream生成文件和利用Scripting.FileSystemObject(fso)
- 我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定
- Python:2.7 IDE:Pycharm5.0.3 今天遇到一个问题,就是在使用json.load()时,中文字符被转化为Unicode
- 开发个人博客时往往避免不了分页功能的实现,实现方法大体上分为函数和类两种。本文基于类实现分页功能,以下是详细代码:class Page: p
- SEO是指搜索引擎优化,主要就是通过对网站的结构、标签、排版等各方面的优化,使搜索引擎更容易抓取网站的内容,并且让网站的各个网页在等搜索引擎
- 本文仅针对 Ubuntu 操作系统环境,其他系统环境待日后遇到再补充。本文主要内容参考Linux公社(https://www.linuxid
- 工欲善其事必先利其器,PyCharm 是最popular的Python开发工具,它提供的功能非常强大,是构建大型项目的理想工具之一,如果能挖
- 我来教你 js文件怎么通过python访问数据库,希望能够为你带来帮助。1、如果是要提交表单内容给 服务器的 python 处理,那么只需要
- python可以简单优美,也很有趣,下面是收集的例子:1.一句话开始一个http的文件服务器:$ python -m SimpleHTTPS
- 今天分享的这篇文章,文字不多,代码为主。绝对干货,童叟无欺,主要分享了提升 Python 性能的 20 个技巧,教你如何告别慢Python。
- 废话不多说,直接上代码吧!# -*- coding: utf-8 -*-import cv2import numpy as np# ----
- 本文实例讲述了js+html5操作sqlite数据库的方法。分享给大家供大家参考,具体如下://copyright by lanxyou l