2

通訳者とは何か、誰か説明してくれませんか。

では、安全なインタープリターとは何を意味するのでしょうか?

私はTCLに不慣れで、これらの言葉についていつも混乱しています。

4

2 に答える 2

4

エグゼクティブ サマリー:
安全なインタープリターは、制限された Tcl スクリプトを実行するためのコンテキストであるため、これらのスクリプトが実行できる損害の量は非常に限られています。


一般に、Tcl インタープリターは Tcl スクリプトを実行するためのコンテキストです。Tcl がグローバル変数を使用し、多数のグローバル コマンドとプロシージャを使用する方法を知っていますか? それらはすべて、インタープリターのコンテキストに関してのみグローバルです。プロセス内の他のすべてのコンテキストは、それらの影響を受けません。それはすでにかなりの孤立です。

しかし、Tcl はさらに進んで、インタープリターが子インタープリター (「スレーブ」と呼ばれることもありますが、私はその用語があまり好きではありません) を作成できるようにします。親インタープリター (「マスター」とも呼ばれる) は、通信を可能にするために、特別な追加コマンド (クロスインタープリター エイリアス) を子インタープリターに挿入できます。子は、渡したい引数を指定して特定のコマンドを呼び出すだけで、親はそれに対して何をすべきか (もしあれば) を決定し、与えたい結果を返します。これは、API の実装方法についてヒントを与えずに API を公開できるという点で素晴らしいことです。バックドアはありません。子供の通訳者は、親が望んでいる親の一部を見ることしか許可されていません。

安全なインタープリターはこれに基づいて構築されています。安全なインタープリターは、多くのデフォルトの Tcl コマンドをオフにして非表示にする特別な方法 ( に-safeオプションを渡すことによって) で作成された子インタープリターです。interp create子インタープリターは、openファイル、socketsourceスクリプト、load拡張コード、またはexecプログラムを作成することはできません。(影響を受けるものは他にもいくつかありますが、それらが主なものです。) 親が制限された方法で機能を公開したい場合は、エイリアスを介して行うことができます (および、 および を実行openするsocketために、 I にアクセスする機能を転送します)。 /O チャネル)。Tcl には、これに加えて追加のコード プロファイル (安全な基本プロファイル) を実行するためのサポートが付属しています。package require他の方法で危険をさらすことなく、親が利用できるパッケージの。安全なインタープリターで動作するかどうかは、パッケージ次第です (C で記述された多くのパッケージは動作しない可能性があり、Tcl パッケージは、コマンドが壁で囲まれている場合にのみ動作する可能性があります)。

ただし、いくつかの制限があります。特に、安全なインタープリターは、あまりにも多くの CPU やメモリを消費することで、ローカル サービス拒否攻撃を行うことができます。8.5 には、CPU の問題に対処するためのメカニズムがいくつかあります。ただし、Tcl は所有するインタープリターを使用してメモリ割り当てにタグを付けないため、メモリはより厄介です — これは面倒です! 非常に制限された時間制限を使用すると、多くの問題が軽減される場合があります。

Tcl の安全なインタープリター機能は、安全な tclに基づいています(これは非常に古いページです。ところで、歴史的に興味深いものです) が、ファンキーな部分はありません。特に、ポリシー プロファイルを作成することは、一般的に行うのは非常に困難であることが判明しましたが、完全にアプリ固有の方法で行うとはるかに簡単になりました。

于 2013-09-28T12:40:12.853 に答える