口译员和安全口译员有什么区别
what is the difference between interpreter and safe interpreter?
谁能解释一下我到底是什么口译员.
那么安全口译员是什么意思?
我是TCL的新手,我总是对这些词感到困惑。
计算机无法理解文本alert("Hello, world!")
或if (x == 5) return;
。它们是编造语言的一部分,因此您需要一些真正的可执行计算机代码来编译文本(将其转换为真正的可执行计算机代码(或解释它(阅读它并代表脚本即时运行适当的计算机指令(。
例如,运行Perl脚本的一种方法是将其名称作为参数传递给perl
程序,该程序会将文本解释为Perl脚本并为您"运行"它。口译员不一定是整个程序;大多数JavaScript解释器只是Web浏览器的一部分,IRC机器人程序eggdrop有一个Tcl解释器作为其中的一部分,等等。
在 Tcl 中,您可以运行多个独立的脚本,每个脚本都由所谓的解释器运行。您可以使用 interp
命令创建它们,并且可以使它们安全。安全的解释器不会运行任何危险的命令,例如创建,打开或删除文件,因此可以让人们通过网页在您的计算机上运行Tcl脚本。
解释器为您运行脚本。您可以将执行代码称为解释器,或者为解释器调用该代码的实际字节数,或者如果程序仅包含解释器而不是更多,例如perl
或tclsh
,我想您也可以将该程序称为解释器。
执行摘要:
安全解释器是运行 Tcl 脚本的上下文,该上下文受到限制,因此这些脚本可以造成的损害量非常有限。
通常,Tcl 解释器是运行 Tcl 脚本的上下文。你知道Tcl使用全局变量的方式,并且有一大堆全局命令和过程吗?它们都只是关于解释器上下文的全局。流程中的所有其他上下文都不受它们的影响。这已经是相当多的孤立了。
但是Tcl更进一步,允许口译员创建儿童口译员(有时称为"奴隶",尽管我不太喜欢这个词(。然后,家长口译员(也称为"主"(可以将特殊的额外命令(交叉口译员别名(插入儿童口译员以允许通信;子级只需使用它想要传递的任何参数调用特定命令,父级决定如何处理它(如果有的话(并返回它想要给出的结果。这很棒,因为它允许您公开 API,而无需提供任何关于它如何实现的提示,并且无法突破;没有后门。儿童口译员只被允许看到父母希望他们看到的那些片段。
安全解释器以此为基础,因为安全解释器是以特殊方式创建的子解释器(通过将-safe
选项传递给interp create
(,它会关闭并隐藏许多默认的Tcl命令。儿童解释器无法open
文件、创建socket
、source
脚本、load
扩展代码或exec
程序。(还有其他一些因素受到影响,但它们是主要因素。如果父级希望以有限的方式公开该功能,则可以通过别名(并且,对于执行open
和socket
,转移访问I/O通道的能力(。Tcl 附带了一些支持,可以在此之上执行额外的代码配置文件 - 安全的基本配置文件 - 它增强了允许孩子执行父级可用的包package require
,而不会暴露任何危险;这取决于包是否想在安全的解释器中工作(许多用 C 编写的包可能不行,而 Tcl 包可能只有在命令被隔离时才有效(。
不过有一些限制。特别是,安全解释器仍然可以通过消耗过多的 CPU 或内存来执行各种类型的本地拒绝服务攻击。在 8.5 中有一些处理 CPU 问题的机制。但是,内存更尴尬,因为 Tcl 不会用拥有的解释器标记内存分配——这变得很混乱!使用真正限制性的时间限制可能会减轻很多麻烦。
Tcl的安全解释器功能基于安全tcl(这是一个非常古老的页面,顺便说一句;具有历史意义(,但没有一些更有趣的部分。特别是,编写策略配置文件通常很难做到,但以完全特定于应用程序的方式要容易得多。
- 全局变量和全局对象的属性之间有什么区别吗
- 在ember/handlers中使用value和valueBinding有什么区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- webpack开发模式和生产构建模式之间有什么区别
- 缓存!saveLocations()和addLocation()函数有什么区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 以下两者在javascript中有什么区别
- 什么's extjs中的mon()和on()之间的区别
- jquery.js和jquery.lite.js有什么区别
- 通过Nuget安装Angular JS和Angular JS核心有什么区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 这两种不同的创建对象文字的方法有什么区别
- jQuery中这两个词有什么区别
- 在Javascript语法中:和::和:::有什么区别
- 什么'这是JS中以下定义方式的区别
- getElementById 和 getElementsByClassName 有什么区别?
- (typeof variable === “function”) 和 jQuery.isFunction() 有什么区别