Provided by: manpages-zh_1.5.1-1_all bug

NAME

       Safe - 用來建立和操縱安全解釋器的機制。

` SYNOPSIS
       ::safe::interpCreate ?slave? ?options...?

       ::safe::interpInit slave ?options...?

       ::safe::interpConfigure slave ?options...?

       ::safe::interpDelete slave

       ::safe::interpAddToAccessPath slave directory

       ::safe::interpFindInAccessPath slave directory

       ::safe::setLogCmd ?cmd arg...?

OPTIONS

       ?-accessPath   pathList?   ?-statics  boolean?  ?-noStatics?   ?-nested
       boolean? ?-nestedLoadOk?  ?-deleteHook script?

yz DESCRIPTION
       Safe        Tcl        是一種機制,用於安全的執行不可信任的         Tcl
       稿本,並為有潛在危險弁鄋瑤Z本提供訪問中介。

       Safe    Base   確保不可信任的   Tcl   稿本不能損壞宿主應用。Safe   Base
       防止完整性和隱私攻擊。防止不可信任的                                Tcl
       稿本敗壞宿主應用或電腦的狀況。防止不可信任的稿本把存儲在宿主主機或宿主應用中的信息泄露給任何人群。

       Safe Base 允酗@茈D解釋器建立安全、受制的解釋器,它包括為  source, load,
       file,                 encoding,                 和                 exit
       命令預定義的一系列別名,並可以使用自動裝載和包機制。

       不向安全解釋器透露檔案系統的任何東西,它只能訪問包含記號(token)的虛擬的路徑。當安全解釋器請求
       source(載入)一蚗仵蛌漁尕,它使用在虛擬路徑中的記號作為n          source
       的檔名的一部分;主解釋器透明的把這荌O號轉換成一蚢篕琲爾纁|名並執行所-
       n求的操作   (詳情參見下悸   SECURITY   安全   章節).    可以使用下探y-
       z的命令標誌來選擇不同的安全級別。

       Safe Base 在主解釋器中提供的所有命令駐留在 safe 名字空間中:

RO COMMANDS
       在主解釋器中提供了下列命令:

       ::safe::interpCreate ?slave? ?options...?
              建立一茼w全解釋器,安裝在ALIASES  別名 章節中描z的別名並初始化在
              OPTIONS    選項    中提供的自動裝載和包機制。對可選擇的參數的描-
              z請參見下 OPTIONS  選項  章節。如果省略了slave  參數,則生成一-
              茼W字。::safe::interpCreate 總是返回解釋器的名字。

       ::safe::interpInit slave ?options...?
              除了不建立安全解釋器之外,這茤R令類似於             interpCreate
              命令。必須已經通過其他方式如   interp   create    -safe建立了這
              slave。

       如果未給出      options,則把給指名的這虒挭擰鼎狾鹵龠答熙]置返回為給這
       slave                        的選項和它抪礅e的漱@茼C表。如果提供了一-
       茬璊@的補充參數,它將返回有兩茪葛 namevalue 的一茼C表,這裏的 name
       是選項的全名而   value   是給   slave   的這蚇龠絲礅eC如果提供多於兩-
       虒犮R選項,它將奐s配置這茼w全解釋器並只改變每荋ㄗ悛瑪龠窗C關於選項的描-
       z請參見下悸 OPTIONS 章節。使用的例子:
              # Create a new interp with the same configuration as "$i0" : set
              i1 [eval safe::interpCreate [safe::interpConfigure $i0]]  #  Get
              the  current deleteHook set dh [safe::interpConfigure $i0  -del]
              # Change (only) the statics loading ok attribute of an interp  #
              and    its   deleteHook   (leaving   the   rest   unchanged)   :
              safe::interpConfigure $i0  -delete {foo bar} -statics 0 ;

       ::safe::interpDelete slave
              刪除這茼w全解釋器並清除相應的主解釋器數據結構。如果為這-
              虒挭擰鼠定了一  deleteHook  稿本,則在刪除這虒挭擰馱妨e執行這-
              蚑Z本,把這虒挭擰鼓漲W字作為一虒犮R參數。

       ::safe::interpFindInAccessPath slave directory
              這茤R令尋找並返回在安全解釋器的當前虛擬訪問路徑中給實際路徑
              directory 的記號。如果未找到這虒纁|則生成一蚇欞~。使用的例子:
              $slave eval [list set tk_library [::safe::interpFindInAccessPath
              $name $tk_library]]

       ::safe::interpAddToAccessPath slave directory
              這茤R令把                                              directory
              添加到在主解釋器中為安全解釋器維護的虛擬路徑中,並返回可在安全解釋器中被用來獲得到在這-
              茈媬中的檔案的訪問的記號。如果這-
              虒纁|已經存在於虛擬路徑中,則它只返回記號而不再次把這-
              虒纁|添加到虛擬路徑中。使用的例子:
              $slave eval [list set tk_library  [::safe::interpAddToAccessPath
              $name $tk_library]]

       ::safe::setLogCmd ?cmd arg...?
              這茤R令安裝在一蚑Z本,在這-
              茼w全解釋器的特定的生命周期事件發生的時埜N被調用。在調用這-
              茤R令而不加參數時,它返回當前安裝的稿本。在調用並加一-
              荌捊臟禤氶A則刪除當前安裝的稿本並關閉日誌記錄。調用這-
              蚑Z本時將加上一虒犮R參數,它描z所感興趣的事件。主-
              n的目的是幫助調試安全解釋器。在安全解釋器只能得到一-
              茪@般錯誤消息的時唭A可以使用這-
              茬]施獲得完整的錯誤消息。這防止安全解釋器見到關於失敗的消息和其他可能包含敏感信息如真實路徑名的其他事件的消息。
              使用的例子:

              ::safe::setLogCmd puts stderr

              下惇O一蚍迉遜儭靰瑪擖X,這裏一茼w全解釋器嘗試著    source    一-
              茼b它的虛擬 訪問路徑中找不到的檔案。注意這茼w全解釋器只接收到一-
              蚇欞~消息,說這茪 件未找到:

              NOTICE for slave interp10 : Created
              NOTICE for slave interp10 : Setting accessPath=(/foo/bar) staticsok=1 nestedok=0 deletehook=()
              NOTICE for slave interp10 : auto_path in interp10 has been set to {$p(:0:)}
              ERROR for slave interp10 : /foo/bar/init.tcl: no such file or directory

 OPTIONS
       下列選項通用於             ::safe::interpCreate::safe::interpInit、和
       ::safe::interpConfigure。任何選項都可縮寫為它的最小的無歧義的名字。選項的名字是大小寫不敏感的。

       -accessPath directoryList
              這蚇龠絨]置目錄的列表,安全解釋器可以從中    sourceload
              檔案。如果未指定這蚇龠窗A或者它被給定為一-
              茠臟C表,安全解釋器將使用的目錄同與它的主解釋器用於自動裝載的目錄。關於虛擬路徑、記號和訪問控制的詳情請參見下-
              悸 SECURITY 安全 章節。

       -statics boolean
              這蚇龠筍定是否允陶o茼w全解釋器裝載靜態連接包(如     load     {}
              Tk)。預設O true : 允釵w全解釋器裝載靜態連接包。

       -noStatics
              這蚇龠筋O   -statics  false      的一茪隢K的簡寫,它指定不允陶o-
              茼w全解釋器裝載靜態連接包。

       -nested boolean
              這蚇龠筍定是否允陶o-
              茼w全解釋器把包裝載到它自己的子解釋器中。預設O       false   :
              不允釵w全解釋器把包裝載到它自己的子解釋器中。

       -nestedLoadOk
              這蚇龠筋O           -nested            true                的一-
              茪隢K的簡寫,它指定允釵w全解釋器把包裝載到它自己的子解釋器中。

       -deleteHook script
              當給這蚇龠等H一茷D空的    script        的時唌A它將在實際刪除這-
              荓q解釋器之前在主解釋器中被求A並加上這茼w全解釋器的名字作為一-
              虒犮R的參數。給予一茠囌則去除任何當前為這-
              茼w全解釋器安裝的刪除回調(hook)稿本。預設-
              ({})是沒有任何刪除回調稿本。

OW ALIASES
       在安全解釋器中提供了下列別名:

       source fileName
              如果找到了n求的這               Tcl              源檔案,則把它
              source(裝載)到安全解釋器中。      source       別名只可以從給這-
              茼w全解釋器的虛擬路徑中的目錄  source 檔案。 關於在有效檔名上的-
              制的更多信息請參見 SECURITY 安全 章節。

       load fileName
              如果找到了n求的這-
              茼@享的目標檔案,則把它動態的裝載到安全解釋器中。為了能成左漣鋮鴠式A檔名必須包含在給這-
              茼w全解釋器的虛擬路徑中提及的一荌O號的名字。還有,這-
              茼@享的目標檔案必須包含一茼w全入口點;詳情請參見            load
              命令的手冊條目。

       file ?subCmd args...?
              file              別名提供到               file命令的子命令的一-
              茼w全子集的訪問;它只允 dirnamejoinextensionroottailpathnamesplit
              子命令。關於這些子命令的詳情請參見 file  命令的手冊條目。

       encoding ?subCmd args...?
              enconding       別名提供到       encoding      命令的子命令的一-
              茼w全子集的訪問;它不允陶]置系統編碼,不允釣銗L子命令包括 system
              檢查當前編碼。

       exit   刪除調用它的稿本並停止它的p算,但這虒挭擰髡s在於其中的那    Tcl
              進程不被終止。

w SECURITY
       Safe                                                               Base
       不嘗試完全的防止煩惱(annoyance)和拒絕服務攻擊。這些形式的攻擊妨礙應用或使用者臨時的使用電腦來完成有用的工作,例如消耗所有可利用的
       CPU 時間或所有可利用的螢幕 real  estate。這些攻擊儘管很惡劣,但一般不如
       Safe Base 主n防護的完整性和隱私攻擊那麼南。

       除了在                           interp                           手冊-
       隊予w義的安全命令集之外,在安全解釋器中可獲得的命令還包括給
       sourceloadexit   的作為中介的(mediate)別名以及   fileencoding
       命令的安全子集。安全解釋器還可以自動裝載代碼並可以請求裝載包。

       因為這些命令中的一些命令訪問本地檔案系統,存在著對它的目錄結構的潛在的信息泄露。為了防止這-
       荌暋D,接受檔名作為參數的命令在安全解釋器中使用記號來替代真實的目錄名。在主解釋器中介一-
       胻求例如                      source                       一蚗仵蛌漁-
       唌A把這些記號轉換成實際路徑名。在主解釋器中維護這茧篔戲纁|系統,針對每-
       茈      ::safe::interpCreate       建立的或用       ::safe::interpInit
       初始化的安全解釋器,這-
       虒纁|把在安全解釋器中可訪問的記號映射成在本地檔案系統上的真實路徑名,這樣就防止了安全解釋器去獲取關於這-
       虒挭擰髡b其上執行的主機的檔案系統結構的知識。可以提供給從解釋器中的
       sourceload 別名的有效的檔名參數只能是下掖o種形式的路徑: [file join
       token   filename]   (比如,在使用本地檔案路徑格式的時:  在  Unix  上是
       token/filename,在   Windows   上是   token\filename,在    Mac    上是
       token:filename    ),這裏的  token  表示  accessPath  列表中的一茈媬而
       filename 是在這茈媬中一蚗仵(不允陶X問子目錄)。

       在一茼w全解釋器中,當在n     source     或裝載一蚗仵蛌漱@蚑虼D中使用一-
       荌O號的時唌A檢查這荌O號並把它轉換成真實路徑名,並在檔案系統上定位n被
       source      或裝載的檔案。安全解釋器不能獲取關於檔案系統上在其下存儲這-
       蚗仵蛌犒篕皒纁|名的知識。

       為了進一步防止潛在的對偶然的包括在可以被安全解釋器               source
       的檔案集中的敏               感檔案的信息泄露,制                source
       別名為訪問滿足下列約束的檔案:              檔名             必須是十四-
       茼r符或更短,必須不包含多於一茠甄I("."),不陴蚺謕鬋X      展       .tcl
       或是被調用的 tclIndex。

       初始的訪問路徑列表中的每茪葛彌N分配一荌O號,它戔N被設置在從解釋器的
       auto_path 中並且這茼C表的第一茪葛彌N被設置為這荓q解釋器的 tcl_library。

       如果未給出訪問路徑參數或者是一-
       茠臟C表,預設的行為是讓從解釋器訪問的包與主解釋器已經訪問了的包相同(更精確的描-
       z:               只允野              Tcl              寫成的包(因為它-
       戔N在從解釋器中運行所以不可能是危險的)和提供   Safe_Init   入口點的   C
       擴展)。為此,用主解釋器的                                     auto_path
       來構造從解釋器的訪問路徑。為了從解釋器能成左爾佶   Tcl   庫檔案(它自-
       包括自動裝載機制),如果需n的話,把                          tcl_library
       增加或移動到在從解釋器的訪問路徑中的第一茠漲鼽m上,這樣從解釋器的
       tcl_library
       將與主解釋器的相同(它的真實路徑對從解釋器仍是不可見的)。為了使自動裝載對於從解釋器和主解釋器在預設的情況下以相同的方式工作,在主解釋器
       auto_path                                                       中的每-
       茈媬的第一層子目錄將被添加(如果未曾包含的話)到從解釋器的訪問路徑中。你總是可以通過顯式的使用
       -accessPath    標誌指定你的目錄列表,而不是依賴於這蚢w設機制,來指定一-
       荍顙制的路徑,它的子目錄永遠不能被查找。

       在漲葦堨蓱峈鴝l化(例如通過  interpConfigure  -accessPath  list)之後變更
       accessPath    的時唌A將在安全解釋器中自動的求    auto_reset   來使它的
       auto_index 與新的記號列表同步。

 SEE ALSO
       interp(n), library(n), load(n), package(n), source(n), unknown(n)

r KEYWORDS
       alias,  auto-loading,  auto_mkindex,  load,  master  interpreter,  safe
       interpreter, slave interpreter, source

[]
      Hhh

[]
       2001/11/07

m Linux manUpn:
       http://cmpp.linuxforum.net