在上一篇http://blog.youkuaiyun.com/msptop/archive/2008/03/31/2233187.aspx 中介绍了关于安全模式的解释器基本特性。然而这些特性太简单太原始,没有脚本库环境,使用起来需要构造大量的额外代码,才能正确执行所需功能。
本节将会介绍tcl提供的已经封装好的安全模式解释器The Safe Base。Safe Base是原始安全模式的扩展,在这种扩展模式下,可以在子解释器中执行脚本文件(source命令)和操作包(package 命令),但是这些操作需要主解释器的授权,它只能访问在主解释器中定义的路径下的文件。并且它也“覆盖”了exit命令。在这种模式下,若执行exit,则子解释器自行销毁并不会波及主程序。
Safe Base的有关命令如下表:
safe::interpCreate slave options? | 创建一个Safe Base模式名为slave的解释器 |
safe::interpInit slave options? | 初始化一个安全模式的解释器 |
safe::interpConfigure slave options? | 配置Safe Base模式的解释器,支持属性:-accessPath pathlist, -nostatics, -deleteHook script, -nestedLoadOk |
删除SafeBase模式的解释器slave | |
为slave添加授权访问路径 | |
返回授权访问路径的符号(用于标识该路径) | |
safe::setLogCmd cmd? arg?... | 若没有参数则返回所有在改解释器中执行过的命令与history类似,若有参数,则将该参数加入记录在解释器中执行过命令的log |
Safe Base中的命令别名:
在授权访问路径中执行脚本 | |
在授权访问路径中导入二进制库 | |
只有dirname, join, extension, root, tail, pathname, and split 这些操作被允许 | |
销毁调用 |