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

JScript RuntimeObject检测全局污染(2)

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

标签:JScript,RuntimeObject,IE

枚举方案: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"));

 

0
投稿

猜你喜欢

  • 阅读上一篇:网马解密大讲堂——网马解密初级篇今天主要讲解的内容是Freshow工具的使用方法,工欲善其事,必先利其器,首先要学会如何使用解密
  • 需求:用SQL语句随机从数据库中随机取N条数据。以前不太清楚SQL语句可以直接随机取数据今天查了一下,发现有两个随机函数: newid()
  • MaxDB是MySQL AB公司通过SAP认证的数据库。MaxDB数据库服务器补充了MySQL AB产品系列。某些MaxDB特性在MySQL
  • 今天好不容易闲下来半天,所以和大家分享一下我之前总结的一套Web UI 设计命名规范,也就是网站用户界面设计(俗称网页设计)命名规范。这套规
  • 前两天特意装了一下IETester,用以方便测试,装好后使用发现IE8有两个地方需要大家注意。IE5MAC的过滤器对IE8 Beta 1版同
  • 关于段落<p></p>相信大家已经都在自己的工作中开始关注并应用了。因为那真的是非常简单的事,只要你愿意你随时都可以
  • Bit-Packed Data TypesMySQL有一些存储类型使用一个值中的一些单个的比特位来紧凑的存储数据。纯技术上将,不管是底层的存
  • 假如不使用INSTEAD OF触发器或可更新分区视图而是通过视图来修改数据,那么再修改之前,请考虑下列准则:◆如果在视图定义中使用了 WIT
  • 要随机生成字符串代码如下:在MySQL中定义一个随机串的方法,然后再SQL语句中调用此方法。随机串函数定义方法:CREATE DEFINER
  • 【尝尝管理员的滋味】- 淡然看,其实一切都很简单IE的滤镜泄露是最大的危害,没有找到方法解决,所以禁用了滤镜。<!DOCTYPE ht
  • 用系统\administrators可以登录,在安全性用户列表中,修改sa属性时系统提示: 属性IsLocked不可用于登录"[s
  • 在我们的生活中,只要你睁开眼睛就能看到各种各样的视觉。不同的视觉能给你不同的视觉暗示,同样能给你不同的心理感受。视觉这个话题太泛了,大自然中
  • 一.设置客户端网络实用工具点击“开始”-“程序”,在“Microsoft SQL Server”菜单中选择“客户端网络实用工具”。在“别名”
  • 在安装好MYSQL ODBD的驱动程序后,应如何建立ASP文件连接数据库?我们有两种方法:一种是在ODBC数据源中建立一个DSN。具体方法是
  • 这是写给web设计者和前端开发者的教程,我们将演示如何使用Photoshop创建按钮的sprite图,然后是如何使用jQurey打造动态渐变
  • 代码如下:--执行顺序 From Where Select select * from (select sal as salary,comm
  • 今天开始学习 YUI,加强一下对 JavaScript 的理解。1. 命名空间 YAHOO
  • 最近群里好多人讨论oracle安全问题,今天找了些资料学习了下 获取Oracle当前会话的一些属性 (对于sql注射的环境判断很有用哦) S
  • 大部分数据库管理员拥有某种形式的数据库元数据库,他们依赖其来跟踪范围很广的Microsoft SQL Server环境。我利用连接的服务器和
  • 在oracle中有很多关于日期的函数,如:1、add_months()用于从一个日期值增加或减少一些月份date_value:=add_mo
手机版 网络编程 asp之家 www.aspxhome.com