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中的每属性,一个全局标识符已被泄露,一个测试案例的警告就会记录下来。


猜你喜欢
- 引用Nmap库实现扫描功能,本节课比较简单一看就会。编写环境:Python2.x编写:首先安装Nmap程序,并添加环境变量pip insta
- 数据备份与还原第二篇,具体如下基础概念:备份,将当前已有的数据或记录另存一份;还原,将数据恢复到备份时的状态。为什么要进行数据的备份与还原?
- 本文实例为大家分享了Python OpenCV调用摄像头检测人脸并截图的具体代码,供大家参考,具体内容如 * 意:需要在python中安装Op
- 偶尔写写Perl脚本,用Eclipse打开太慢,NotePad吧,色彩又太单调了,NotePad++无疑是不一个不错的选择,但当要输入中文注
- 如果你正在学习编程,那么掌握 Python map 函数是你升级的机会。想象一下:你想成为一个更高效的程序员,你希望代码编译得更快,你想用你
- 本文实例讲述了php实现按照权重随机排序数据的方法。分享给大家供大家参考。具体实现方法如下:<?php /**
- 导入库和数据首先,我们需要导入PyTorch和PyG库,然后准备好我们的数据。例如,我们可以使用以下方式生成一个简单的随机数据集:from
- 本文使用的是163邮件进行测试。注:163邮箱现在需要使用 客户端授权码 进行测试,不再支持邮箱密码进行测试。 
- 起步在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作。例如,有一个类实例对象foo,它有一个name属性
- 制作一个查看器可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单。所以重点放在 QThread 多线程的应用上面。QThread 子
- 下面先来看看例子:table表字段1 字段2 i
- print() 方法用于打印当前窗口的内容,支持部分或者整个网页打印。调用 print() 方法所引发的行为就像用户单击浏览器的打印按钮。通
- 用keras搭好模型架构之后的下一步,就是执行编译操作。在编译时,经常需要指定三个参数lossoptimizermetrics这三个参数有两
- python对csv文件追加写入列,具体内容如下所示:原始数据[外链图片转存失败(img-zQSQWAyQ-1563597916666)(C
- 前言无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了环境使用Python 3.8Pycharm模块使用import
- 本文实例讲述了Python基于二分查找实现求整数平方根的方法。分享给大家供大家参考,具体如下:x=int(raw_input('pl
- 本文实例为大家分享了JavaScript实现简易购物车的具体代码,供大家参考,具体内容如下代码:<!DOCTYPE html>&
- 查询速度慢的原因很多,常见如下几种:1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2.I/O吞吐量小,形成了瓶颈效
- torch.save:保存序列化的对象到磁盘,使用了Python的pickle进行序列化,模型、张量、所有对象的字典。torch.load:
- 知道两点坐标,怎么计算两点方向的方位角?答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的)。若dx,dy中有一个为零时,