安全的类型检测

JavaScript内置的类型检测机制并非完全可靠。事实上,发生错误否定及错误肯定的情况也不在少数。比如说 typeof 操作符吧,由于它有一些无法预知的行为,经常会导致检测数据类型时得到不靠谱的结果。(如typeof检测一个不存在的变会返回undefined)


再比如, instanceof 操作符在存在多个全局作用域(像一个页面包含多个框架)的情况下,也是问题多多。


var isArray = value instanceof Array;


以上代码要返回 true , value 必须是一个数组,而且还必须与 Array 构造函数在同个全局作用域中。(别忘了, Array 是 window 的属性。)如果 value 是在另个框架中定义的数组,那么以上代码就会返回 false 。


解决上述问题的办法都一样。大家知道,在任何值上调用 Object 原生的 toString()方法,都会返回一个 [object  NativeConstructorName] 格式的字符串。每个类在内部都有一个 [[Class]] 属性,这个属性中就指定了上述字符串中的构造函数名。举个例子吧。


alert(Object.prototype.toString.call(value)); //”[object Array]”


由于原生数组的构造函数名与全局作用域无关,因此使用 toString() 就能保证返回一致的值。利用这一点,可以创建如下函数:


function isArray(value){

    return Object.prototype.toString.call(value) == ”[object Array]”;

}


同样,也可以基于这一思路来测试某个值是不是原生函数或正则表达式:


function isFunction(value){

    return Object.prototype.toString.call(value) == ”[object Function]”;

}

function isRegExp(value){

    return Object.prototype.toString.call(value) == ”[object RegExp]”;

}


Object 的 toString() 方法不能检测非原生构造函数的构造函数名。因此,开发人员定义的任何构造函数都将返回[objectObject]。有些JavaScript库会包含与下面类似的代码。


var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON) ==

“[object JSON]”;


在Web开发中能够区分原生与非原生JavaScript对象非常重要。只有这样才能确切知道某个对象到底有哪些功能。这个技巧可以对任何对象给出正确的结论。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WEB安全测试分类及防范测试方法 1 Web 应用程序布署环境测试 2 1.1HTTP 请求引发漏洞的测试 2 1.2 操作系统目录安全性及Web 应用程序布署环境目录遍历问题测试 2 2 应用程序测试 3 2.1 SQL 注入漏洞测试 3 2.1.1 SQL注入漏洞攻击实现原理 3 2.1.2 SQL注入漏洞防范措施 4 2.1.3 SQL注入漏洞检测方法 5 2.2 表单漏洞测试 6 2.2.1 表单漏洞实现原理 6 2.2.2 表单漏洞防范措施 6 2.2.3 表单漏洞检测方法 6 2.3 Cookie欺骗漏洞测试 8 2.3.1 Cookie欺骗实现原理 8 2.3.2 Cookie欺骗防范措施 8 2.3.3 Cookie欺骗监测方法 9 2.4 用户身份验证测试 9 2.4.1 用户身份验证漏洞防范措施 9 2.4.2 用户身份验证检测方法 9 2.5 文件操作漏洞测试 9 2.5.1 文件操作漏洞实现原理 9 2.5.2 文件操作漏洞防范措施 10 2.5.3 文件操作漏洞检测方法 10 2.6 Session 测试 11 2.6.1 客户端对服务器端的欺骗攻击 11 2.6.2直接对服务器端的欺骗攻击 11 2.6.3 Session漏洞检测方法 12 2.7 跨网站脚本(XSS)漏洞测试 13 2.7.1 跨网站脚本(XSS)漏洞实现原理 13 2.7.2 跨网站脚本(XSS)漏洞防范措施 13 2.7.3 跨网站脚本(XSS)漏洞测试方法 14 2.8 命令注射漏洞测试 14 2.9 日志文件测试 14 2.10 访问控制策略测试 14 2.10.1 访问控制策略测试方法 14 3 数据库问题测试 15 3.1 数据库名称和存放位置安全检测 15 3.2 数据库本身的安全检测 15 3.3 数据使用时的一致性和完整性测试 15 4 容错测试 15 4.1 容错方案及方案一致性测试 16 4.2 接口容错测试 16 4.3 压力测试 16

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值