safe.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:15k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1995-1996 Sun Microsystems, Inc.
  3. '"
  4. '" See the file "license.terms" for information on usage and redistribution
  5. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  6. '" 
  7. '" RCS: @(#) $Id: safe.n,v 1.4.2.1 2004/10/27 14:23:58 dkf Exp $
  8. '" 
  9. .so man.macros
  10. .TH "Safe Tcl" n 8.0 Tcl "Tcl Built-In Commands"
  11. .BS
  12. '" Note:  do not modify the .SH NAME line immediately below!
  13. .SH NAME
  14. Safe Base - A mechanism for creating and manipulating safe interpreters.
  15. .SH SYNOPSIS
  16. fB::safe::interpCreatefR ?fIslavefR? ?fIoptions...fR?
  17. .sp
  18. fB::safe::interpInitfR fIslavefR ?fIoptions...fR?
  19. .sp
  20. fB::safe::interpConfigurefR fIslavefR ?fIoptions...fR?
  21. .sp
  22. fB::safe::interpDeletefR fIslavefR
  23. .sp
  24. fB::safe::interpAddToAccessPathfR fIslavefR fIdirectoryfR
  25. .sp
  26. fB::safe::interpFindInAccessPathfR fIslavefR fIdirectoryfR
  27. .sp
  28. fB::safe::setLogCmdfR ?fIcmd arg...fR?
  29. .SH OPTIONS
  30. .PP
  31. ?fB-accessPathfR fIpathListfR?
  32. ?fB-staticsfR fIbooleanfR? ?fB-noStaticsfR?
  33. ?fB-nestedfR fIbooleanfR? ?fB-nestedLoadOkfR?
  34. ?fB-deleteHookfR fIscriptfR?
  35. .BE
  36. .SH DESCRIPTION
  37. Safe Tcl is a mechanism for executing untrusted Tcl scripts
  38. safely and for providing mediated access by such scripts to
  39. potentially dangerous functionality.
  40. .PP
  41. The Safe Base ensures that untrusted Tcl scripts cannot harm the
  42. hosting application.
  43. The Safe Base prevents integrity and privacy attacks. Untrusted Tcl
  44. scripts are prevented from corrupting the state of the hosting
  45. application or computer. Untrusted scripts are also prevented from
  46. disclosing information stored on the hosting computer or in the
  47. hosting application to any party.
  48. .PP
  49. The Safe Base allows a master interpreter to create safe, restricted
  50. interpreters that contain a set of predefined aliases for the fBsourcefR,
  51. fBloadfR, fBfilefR, fBencodingfR, and fBexitfR commands and
  52. are able to use the auto-loading and package mechanisms.
  53. .PP
  54. No knowledge of the file system structure is leaked to the
  55. safe interpreter, because it has access only to a virtualized path
  56. containing tokens. When the safe interpreter requests to source a file, it
  57. uses the token in the virtual path as part of the file name to source; the
  58. master interpreter transparently 
  59. translates the token into a real directory name and executes the 
  60. requested operation (see the section fBSECURITYfR below for details).
  61. Different levels of security can be selected by using the optional flags
  62. of the commands described below.
  63. .PP
  64. All commands provided in the master interpreter by the Safe Base reside in
  65. the fBsafefR namespace:
  66. .SH COMMANDS
  67. The following commands are provided in the master interpreter:
  68. .TP
  69. fB::safe::interpCreatefR ?fIslavefR? ?fIoptions...fR?
  70. Creates a safe interpreter, installs the aliases described in the section
  71. fBALIASESfR and initializes the auto-loading and package mechanism as
  72. specified by the supplied fBoptionsfR.
  73. See the fBOPTIONSfR section below for a description of the
  74. optional arguments.
  75. If the fIslavefR argument is omitted, a name will be generated.
  76. fB::safe::interpCreatefR always returns the interpreter name.
  77. .TP
  78. fB::safe::interpInitfR fIslavefR ?fIoptions...fR?
  79. This command is similar to fBinterpCreatefR except it that does not
  80. create the safe interpreter. fIslavefR must have been created by some
  81. other means, like fBinterp create -safefR.
  82. .TP
  83. fB::safe::interpConfigurefR fIslavefR ?fIoptions...fR?
  84. If no fIoptionsfR are given, returns the settings for all options for the
  85. named safe interpreter as a list of options and their current values
  86. for that fIslavefR. 
  87. If a single additional argument is provided,
  88. it will return a list of 2 elements fInamefR and fIvaluefR where
  89. fInamefR is the full name of that option and fIvaluefR the current value
  90. for that option and the fIslavefR.
  91. If more than two additional arguments are provided, it will reconfigure the
  92. safe interpreter and change each and only the provided options.
  93. See the section on fBOPTIONSfR below for options description.
  94. Example of use:
  95. .RS
  96. .CS
  97. # Create a new interp with the same configuration as "$i0" :
  98. set i1 [eval safe::interpCreate [safe::interpConfigure $i0]]
  99. # Get the current deleteHook
  100. set dh [safe::interpConfigure $i0  -del]
  101. # Change (only) the statics loading ok attribute of an interp
  102. # and its deleteHook (leaving the rest unchanged) :
  103. safe::interpConfigure $i0  -delete {foo bar} -statics 0 ;
  104. .CE
  105. .RE
  106. .TP
  107. fB::safe::interpDeletefR fIslavefR
  108. Deletes the safe interpreter and cleans up the corresponding  
  109. master interpreter data structures.
  110. If a fIdeleteHookfR script was specified for this interpreter it is
  111. evaluated before the interpreter is deleted, with the name of the
  112. interpreter as an additional argument.
  113. .TP
  114. fB::safe::interpFindInAccessPathfR fIslavefR fIdirectoryfR
  115. This command finds and returns the token for the real directory
  116. fIdirectoryfR in the safe interpreter's current virtual access path.
  117. It generates an error if the directory is not found.
  118. Example of use:
  119. .RS
  120. .CS
  121. $slave eval [list set tk_library [::safe::interpFindInAccessPath $name $tk_library]]
  122. .CE
  123. .RE
  124. .TP
  125. fB::safe::interpAddToAccessPathfR fIslavefR fIdirectoryfR
  126. This command adds fIdirectoryfR to the virtual path maintained for the
  127. safe interpreter in the master, and returns the token that can be used in
  128. the safe interpreter to obtain access to files in that directory.
  129. If the directory is already in the virtual path, it only returns the token
  130. without adding the directory to the virtual path again.
  131. Example of use:
  132. .RS
  133. .CS
  134. $slave eval [list set tk_library [::safe::interpAddToAccessPath $name $tk_library]]
  135. .CE
  136. .RE
  137. .TP
  138. fB::safe::setLogCmdfR ?fIcmd arg...fR?
  139. This command installs a script that will be called when interesting
  140. life cycle events occur for a safe interpreter.
  141. When called with no arguments, it returns the currently installed script.
  142. When called with one argument, an empty string, the currently installed
  143. script is removed and logging is turned off.
  144. The script will be invoked with one additional argument, a string
  145. describing the event of interest.
  146. The main purpose is to help in debugging safe interpreters.
  147. Using this facility you can get complete error messages while the safe
  148. interpreter gets only generic error messages.
  149. This prevents a safe interpreter from seeing messages about failures
  150. and other events that might contain sensitive information such as real
  151. directory names.
  152. .RS
  153. Example of use:
  154. .CS
  155. ::safe::setLogCmd puts stderr
  156. .CE
  157. Below is the output of a sample session in which a safe interpreter
  158. attempted to source a file not found in its virtual access path.
  159. Note that the safe interpreter only received an error message saying that
  160. the file was not found:
  161. .CS
  162. NOTICE for slave interp10 : Created
  163. NOTICE for slave interp10 : Setting accessPath=(/foo/bar) staticsok=1 nestedok=0 deletehook=()
  164. NOTICE for slave interp10 : auto_path in interp10 has been set to {$p(:0:)}
  165. ERROR for slave interp10 : /foo/bar/init.tcl: no such file or directory
  166. .CE
  167. .RE
  168. .SH OPTIONS
  169. The following options are common to 
  170. fB::safe::interpCreatefR, fB::safe::interpInitfR, 
  171. and fB::safe::interpConfigurefR.
  172. Any option name can be abbreviated to its minimal 
  173. non-ambiguous name.
  174. Option names are not case sensitive.
  175. .TP 
  176. fB-accessPathfR fIdirectoryListfR
  177. This option sets the list of directories from which the safe interpreter
  178. can fBsourcefR and fBloadfR files.
  179. If this option is not specified, or if it is given as the
  180. empty list, the safe interpreter will use the same directories as its
  181. master for auto-loading.
  182. See the section fBSECURITYfR below for more detail about virtual paths, 
  183. tokens and access control.
  184. .TP
  185. fB-staticsfR fIbooleanfR
  186. This option specifies if the safe interpreter will be allowed
  187. to load statically linked packages (like fBload {} TkfR).
  188. The default value is fBtruefR : 
  189. safe interpreters are allowed to load statically linked packages.
  190. .TP
  191. fB-noStaticsfR
  192. This option is a convenience shortcut for fB-statics falsefR and
  193. thus specifies that the safe interpreter will not be allowed
  194. to load statically linked packages.
  195. .TP
  196. fB-nestedfR fIbooleanfR
  197. This option specifies if the safe interpreter will be allowed
  198. to load packages into its own sub-interpreters.
  199. The default value is fBfalsefR : 
  200. safe interpreters are not allowed to load packages into
  201. their own sub-interpreters.
  202. .TP
  203. fB-nestedLoadOkfR
  204. This option is a convenience shortcut for fB-nested truefR and
  205. thus specifies the safe interpreter will be allowed
  206. to load packages into its own sub-interpreters.
  207. .TP 
  208. fB-deleteHookfR fIscriptfR
  209. When this option is given a non-empty fIscriptfR, it will be
  210. evaluated in the master with the name of
  211. the safe interpreter as an additional argument
  212. just before actually deleting the safe interpreter.
  213. Giving an empty value removes any currently installed deletion hook
  214. script for that safe interpreter.
  215. The default value (fB{}fR) is not to have any deletion call back.
  216. .SH ALIASES
  217. The following aliases are provided in a safe interpreter:
  218. .TP
  219. fBsourcefR fIfileNamefR
  220. The requested file, a Tcl source file, is sourced into the safe interpreter
  221. if it is found.
  222. The fBsourcefR alias can only source files from directories in
  223. the virtual path for the safe interpreter. The fBsourcefR alias requires
  224. the safe interpreter to
  225. use one of the token names in its virtual path to denote the directory in
  226. which the file to be sourced can be found.
  227. See the section on fBSECURITYfR for more discussion of restrictions on
  228. valid filenames.
  229. .TP
  230. fBloadfR fIfileNamefR
  231. The requested file, a shared object file, is dynamically loaded into the
  232. safe interpreter if it is found.
  233. The filename must contain a token name mentioned in the virtual path for
  234. the safe interpreter for it to be found successfully.
  235. Additionally, the shared object file must contain a safe entry point; see
  236. the manual page for the fBloadfR command for more details.
  237. .TP
  238. fBfilefR ?fIsubCmd args...fR?
  239. The fBfilefR alias provides access to a safe subset of the subcommands of
  240. the fBfilefR command; it allows only fBdirnamefR, fBjoinfR,
  241. fBextensionfR, fBrootfR, fBtailfR, fBpathnamefR and fBsplitfR
  242. subcommands. For more details on what these subcommands do see the manual
  243. page for the fBfilefR command.
  244. .TP
  245. fBencodingfR ?fIsubCmd args...fR?
  246. The fBencodingfR alias provides access to a safe subset of the
  247. subcommands of the fBencodingfR command;  it disallows setting of
  248. the system encoding, but allows all other subcommands including
  249. fBsystemfR to check the current encoding.
  250. .TP
  251. fBexitfR
  252. The calling interpreter is deleted and its computation is stopped, but the
  253. Tcl process in which this interpreter exists is not terminated.
  254. .SH SECURITY
  255. The Safe Base does not attempt to completely prevent annoyance and
  256. denial of service attacks. These forms of attack prevent the
  257. application or user from temporarily using the computer to perform
  258. useful work, for example by consuming all available CPU time or
  259. all available screen real estate.
  260. These attacks, while aggravating, are deemed to be of lesser importance
  261. in general than integrity and privacy attacks that the Safe Base
  262. is to prevent.
  263. .PP
  264. The commands available in a safe interpreter, in addition to
  265. the safe set as defined in fBinterpfR manual page, are mediated aliases
  266. for fBsourcefR, fBloadfR, fBexitfR, and safe subsets of
  267. fBfilefR and fBencodingfR. The safe interpreter can also auto-load
  268. code and it can request that packages be loaded.
  269. .PP
  270. Because some of these commands access the local file system, there is a
  271. potential for information leakage about its directory structure.
  272. To prevent this, commands that take file names as arguments in a safe
  273. interpreter use tokens instead of the real directory names.
  274. These tokens are translated to the real directory name while a request to,
  275. e.g., source a file is mediated by the master interpreter.
  276. This virtual path system is maintained in the master interpreter for each safe
  277. interpreter created by fB::safe::interpCreatefR or initialized by
  278. fB::safe::interpInitfR and
  279. the path maps tokens accessible in the safe interpreter into real path
  280. names on the local file system thus preventing safe interpreters 
  281. from gaining knowledge about the
  282. structure of the file system of the host on which the interpreter is
  283. executing.
  284. The only valid file names arguments
  285. for the fBsourcefR and fBloadfR aliases provided to the slave
  286. are path in the form of 
  287. fB[file join fRfItoken filenamefRfB]fR (i.e. when using the
  288. native file path formats: fItokenfRfB/fRfIfilenamefR
  289. on Unix, fItokenfRfB\fIfilenamefR on Windows, 
  290. and fItokenfRfB:fRfIfilenamefR on the Mac),
  291. where fItokenfR is representing one of the directories 
  292. of the fIaccessPathfR list and fIfilenamefR is
  293. one file in that directory (no sub directories access are allowed).
  294. .PP
  295. When a token is used in a safe interpreter in a request to source or
  296. load a file, the token is checked and
  297. translated to a real path name and the file to be
  298. sourced or loaded is located on the file system.
  299. The safe interpreter never gains knowledge of the actual path name under
  300. which the file is stored on the file system.
  301. .PP
  302. To further prevent potential information leakage from sensitive files that
  303. are accidentally included in the set of files that can be sourced by a safe
  304. interpreter, the fBsourcefR alias restricts access to files
  305. meeting the following constraints: the file name must
  306. fourteen characters or shorter, must not contain more than one dot ("fB.fR"),
  307. must end up with the extension fB.tclfR or be called fBtclIndexfR.
  308. .PP
  309. Each element of the initial access path
  310. list will be assigned a token that will be set in
  311. the slave fBauto_pathfR and the first element of that list will be set as
  312. the fBtcl_libraryfR for that slave.
  313. .PP
  314. If the access path argument is not given or is the empty list, 
  315. the default behavior is to let the slave access the same packages
  316. as the master has access to (Or to be more precise: 
  317. only packages written in Tcl (which by definition can't be dangerous
  318. as they run in the slave interpreter) and C extensions that
  319. provides a Safe_Init entry point). For that purpose, the master's 
  320. fBauto_pathfR will be used to construct the slave access path. 
  321. In order that the slave successfully loads the Tcl library files
  322. (which includes the auto-loading mechanism itself) the fBtcl_libraryfR will be
  323. added or moved to the first position if necessary, in the 
  324. slave access path, so the slave
  325. fBtcl_libraryfR will be the same as the master's (its real
  326. path will still be invisible to the slave though). 
  327. In order that auto-loading works the same for the slave and
  328. the master in this by default case, the first-level
  329. sub directories of each directory in the master fBauto_pathfR will
  330. also be added (if not already included) to the slave access path.
  331. You can always specify a more
  332. restrictive path for which sub directories will never be searched by 
  333. explicitly specifying your directory list with the fB-accessPathfR flag
  334. instead of relying on this default mechanism.
  335. .PP
  336. When the fIaccessPathfR is changed after the first creation or
  337. initialization (i.e. through fBinterpConfigure -accessPath fRfIlistfR),
  338. an fBauto_resetfR is automatically evaluated in the safe interpreter
  339. to synchronize its fBauto_indexfR with the new token list.
  340. .SH "SEE ALSO"
  341. interp(n), library(n), load(n), package(n), source(n), unknown(n)
  342.  
  343. .SH KEYWORDS
  344. alias, auto-loading, auto_mkindex, load, master interpreter, safe
  345. interpreter, slave interpreter, source