任何人都可以解释一下,究竟是一名翻译。
那么安全翻译是什么意思?
我是TCL的新手。我总是对这些话感到困惑。
答案 0 :(得分:4)
计算机无法理解文字alert("Hello, world!")
或if (x == 5) return;
。它们是组成语言的一部分,因此您需要一些真正的可执行计算机代码来编译文本(将其转换为真正的可执行计算机代码)或解释它(阅读它并在运行中运行适当的计算机指令)代表剧本。)
例如,运行Perl脚本的一种方法是将其名称作为参数传递给perl
程序,该程序将该文本解释为Perl脚本并为您“运行”它。翻译不一定是整个程序;大多数JavaScript解释器只是Web浏览器的一部分,IRC bot程序eggdrop有一个Tcl解释器作为其中的一部分,等等。
在Tcl中,您可以运行多个独立的脚本,每个脚本都运行一个名为interpreter的脚本。您可以使用interp
命令创建它们,并且可以使它们安全。安全的解释器不会运行任何危险的命令,例如创建,打开或删除文件,因此可以例如让人们通过网页在您的计算机上运行Tcl脚本。
解释器为您运行脚本。您可以将执行代码称为解释器,或者为解释器调用该代码的实际字节,或者如果程序只包含解释器而不是更多,例如perl
或tclsh
,我想你可以称该程序为解释器。
答案 1 :(得分:4)
执行摘要:
安全解释器是运行受限制的Tcl脚本的上下文,因此这些脚本可以造成的损坏程度非常有限。
通常,Tcl解释器是运行Tcl脚本的上下文。你知道Tcl使用全局变量的方式,并且有一大堆全局命令和过程吗?就翻译环境而言,它们都只是全球性的。该过程中的所有其他上下文都不受它们的影响。这已经相当多了。
但是Tcl更进一步,允许口译员创建儿童口译员(有时称为“奴隶”,虽然我不太喜欢那个词)。然后,父解释器(也称为“主”)可以将特殊的额外命令(交叉解释器别名)引入子解释器以允许通信;孩子只是调用一个特定的命令,用它想传递的任何参数,父母决定该做什么(如果有的话)并返回它想要给出的结果。这很棒,因为它允许您公开API而不提供有关如何实现它的任何提示,并且无法突破;没有后门。儿童口译员只能看到父母希望他们的父母那些。
安全解释器以此为基础,因为安全解释器是以特殊方式创建的子解释器(通过将-safe
选项传递给interp create
),该解释器关闭并隐藏大量默认值Tcl命令。子解释器不能open
个文件,创建socket
个,source
个脚本,load
扩展程序代码或exec
程序。 (还有一些其他因素受到影响,但它们是主要的。)如果父级想要以有限的方式公开该功能,它可以通过别名来实现(并且,用于执行{ {1}}和open
,转移访问I / O频道的能力)。 Tcl提供了一些支持,可以在此基础上执行额外的代码配置文件 - safe basic profile - 这可以增强内容以允许孩子为父提供socket
个包而不用< / em>否则暴露任何危险;它取决于它是否想要在一个安全的解释器中工作(许多用C编写的软件包可能没有,而且Tcl软件包可能只有在它们有被封闭的命令时才能工作)。
但是有一些限制。特别是,安全解释器仍然可以通过消耗过多的CPU或内存来进行各种类型的本地拒绝服务攻击。有some mechanisms用于处理8.5中的CPU问题。然而,由于Tcl没有使用拥有的解释器标记内存分配,因此内存更加笨拙 - 这会变得混乱!使用真正限制性的时间限制可以减轻很多麻烦。
Tcl的安全解释器功能基于safe tcl(这是真正的旧页面,BTW;具有历史意义),但没有一些有趣的位。特别是,编写策略配置文件通常很难做到,但在完全特定于应用程序的方式下更容易。