口译员和安全口译员有什么区别

what is the difference between interpreter and safe interpreter?

本文关键字:区别 什么 安全      更新时间:2023-09-26

谁能解释一下我到底是什么口译员.

那么安全口译员是什么意思?

我是TCL的新手,我总是对这些词感到困惑。

计算机无法理解文本alert("Hello, world!")if (x == 5) return;。它们是编造语言的一部分,因此您需要一些真正的可执行计算机代码来编译文本(将其转换为真正的可执行计算机代码(或解释它(阅读它并代表脚本即时运行适当的计算机指令(。

例如,运行Perl脚本的一种方法是将其名称作为参数传递给perl程序,该程序会将文本解释为Perl脚本并为您"运行"它。口译员不一定是整个程序;大多数JavaScript解释器只是Web浏览器的一部分,IRC机器人程序eggdrop有一个Tcl解释器作为其中的一部分,等等。

在 Tcl 中,您可以运行多个独立的脚本,每个脚本都由所谓的解释器运行。您可以使用 interp 命令创建它们,并且可以使它们安全。安全的解释器不会运行任何危险的命令,例如创建,打开或删除文件,因此可以让人们通过网页在您的计算机上运行Tcl脚本。

解释器为您运行脚本。您可以将执行代码称为解释器,或者为解释器调用该代码的实际字节数,或者如果程序仅包含解释器而不是更多,例如perltclsh,我想您也可以将该程序称为解释器。

执行摘要:
安全解释器是运行 Tcl 脚本的上下文,该上下文受到限制,因此这些脚本可以造成的损害量非常有限。


通常,Tcl 解释器是运行 Tcl 脚本的上下文。你知道Tcl使用全局变量的方式,并且有一大堆全局命令和过程吗?它们都只是关于解释器上下文的全局。流程中的所有其他上下文都不受它们的影响。这已经是相当多的孤立了。

但是Tcl更进一步,允许口译员创建儿童口译员(有时称为"奴隶",尽管我不太喜欢这个词(。然后,家长口译员(也称为"主"(可以将特殊的额外命令(交叉口译员别名(插入儿童口译员以允许通信;子级只需使用它想要传递的任何参数调用特定命令,父级决定如何处理它(如果有的话(并返回它想要给出的结果。这很棒,因为它允许您公开 API,而无需提供任何关于它如何实现的提示,并且无法突破;没有后门。儿童口译员只被允许看到父母希望他们看到的那些片段。

安全解释器以此

为基础,因为安全解释器是以特殊方式创建的子解释器(通过将-safe选项传递给interp create(,它会关闭并隐藏许多默认的Tcl命令。儿童解释器无法open文件、创建socketsource脚本、load扩展代码或exec程序。(还有其他一些因素受到影响,但它们是主要因素。如果父级希望以有限的方式公开该功能,则可以通过别名(并且,对于执行opensocket,转移访问I/O通道的能力(。Tcl 附带了一些支持,可以在此之上执行额外的代码配置文件 - 安全的基本配置文件 - 它增强了允许孩子执行父级可用的包package require而不会暴露任何危险;这取决于包是否想在安全的解释器中工作(许多用 C 编写的包可能不行,而 Tcl 包可能只有在命令被隔离时才有效(。

不过有一些限制。特别是,安全解释器仍然可以通过消耗过多的 CPU 或内存来执行各种类型的本地拒绝服务攻击。在 8.5 中有一些处理 CPU 问题的机制。但是,内存更尴尬,因为 Tcl 不会用拥有的解释器标记内存分配——这变得很混乱!使用真正限制性的时间限制可能会减轻很多麻烦。

Tcl的安全解释器功能基于安全tcl(这是一个非常古老的页面,顺便说一句;具有历史意义(,但没有一些更有趣的部分。特别是,编写策略配置文件通常很难做到,但以完全特定于应用程序的方式要容易得多。