浅谈 Dojo 中的安全工具包
安全工作一直是我们日常开发中需要注意的一个问题,对于 Web 开发而言,需要引起我们重视的主要就是 JavaScript 的安全性了。JavaScript 这样一种脚本语言可以运行在各种浏览器中,但是基于安全性的考虑,几乎所有的浏览器提供给 JavaScript 的接口都是很有限的,尤其是一些安全敏感的接口,如文件的读写操作,内存的控制等等。
这么看似乎 JavaScript 不论怎样写都是非常安全的,其实不然。即便是在这样一个限制重重的环境里,一样有很多漏洞可钻,比如:当您的网站引入了一个外网的 JavaScript,就很容易造成变量的冲突(尤其是全局变量),DOM 操作的混乱等等。如果不对该 JavaScript 作一些限制,那么我们是很难保证自己的网站不会被一些外界因素所干扰,甚至崩溃也不是没有可能。Dojo 的安全工具包提供了一组接口 API 专门用于解决这样一类安全问题,基于这组安全接口,我们不再需要自己额外加上一些安全方面的控制代码。这篇文章将重点介绍 Dojo 的这套安全工具包的功能和使用方式。
Dojo 的 Secure 工具包简介
当我们的应用需要和一些外部的脚本或者数据协同工作时,我们不可避免的要为保证我们自己代码和数据的安全而加入一些额外校验或检测代码。很多情况下,我们不一定能考虑到所有可能的情况,所以我们的应用会存在或多或少的安全隐患。于是,Dojo 的 Secure 工具包应运而生。Dojo 的 Secure 工具包主要包括一些日常经常需要用到的安全相关的一些工具,它封装了很多安全相关的 API,我们只需要通过简单的调用即可完成我们安全检测。
Capability 接口
Dojo 的 Secure 工具包中的 Capability 接口主要用来验证 JavaScript 脚本的合法性,以保证在脚本执行之前确保该脚本不会访问或修改它权限之外的对象或数据。它的使用方式很简单:
如上所列,本地模式的接口很简单:“sandbox.evaluate”,和之前的基础接口无异。跨域模式则是基于异步模式的调用,这里您只需要通过“addErrback”添加异常处理代码即可。注意,这里的“loadJS”和“loadHTML”分别用于执行 JavaScript 和 HTML 代码,它们的传入值应为一段 URL,如:“http://www.sitepen.com/labs/code/secure/dojox/secure/tests/good.js” 或 “http://www.sitepen.com/labs/code/secure/dojox/secure/tests/good.html”。
结束语
这篇文章介绍了 Dojo 中安全工具包的一些特性,从安全的角度阐述了 Dojo 的安全工具包的各种借口,以及我们为什么需要这些接口。先介绍了 Capability 接口,即如何检测我们代码的安全性。进而扩展到 DOM 和 JSON 相关的接口,即哪种操作才是安全的。最后,通过 SandBox 接口介绍了在本地和跨域两种情况下,如何通过 Dojo 的接口安全的执行相关代码。本文主要是基于实际的代码示例来说明这些接口的用法,简明直观,推荐大家在日常开发中多参考。
本文首发于IBM Developerworks:http://www.ibm.com/developerworks/cn/web/1204_zhouxiang_dojosecure/