|
|
|
|
|
|
::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...?
Safe Tcl — это механизм безопасного исполнения ненадежных Tcl скриптов и предоставления этим скриптам опосредованного доступа к потенциально опасным функциям.
Safe Tcl служит для того, чтобы ненадежные скрипты не смогли нарушить работу вызывающего их приложения: он предотвращает покушения на несанкционированный доступ к информации и нарушение целостности вызывающего этот скрипт процесса.
Safe Tcl позволяет интерпретатору-предку создавать безопасные интерпретаторы с ограниченными возможностями, в которых содержится набор предопределенных синонимов для команд source, load, file и exit и сохраняются возможности автозагрузки команд и пакетов.
Безопасный интерпретатор не позволяет получить какую-либо информацию о структуре файловой системы, поскольку для доступа к файлам в безопасном интерпретаторе используются специальные метки. Когда безопасный интерпретатор запрашивает доступ к файлу, он использует метку как часть виртуального имени файла. Родительский интерпретатор заменяет метку на реальное имя каталога и выполняет требуемую операцию с файлом. С помощью опций команд, описанных ниже, можно выбрать требуемый уровень безопасности интерпретатора.
Все команды для работыс безопасными интерпретаторами
содержатся в пространстве имен safe. Команда ::safe::interpCreate
создает безопасный интерпретатор. Возможные опции команды описаны ниже,
см. “Опции”.
Команда возвращает имя созданного интерпретатора.
Команда ::safe::interpInit аналогична,
но ее первым аргументом должно быть имя интерпретатора, созданного с помощью
команды interp. Команда ::safe::interpDelete
удаляет интерпретатор, имя которого использовано в качестве аргумента. Команда
::safe::interpConfigure позволяет
задать опции для безопасного интерпретатора или получить информацию об заданных
ранее опциях. Подробно опции описаны ниже (см. “Опции”).
Для каждого безопасного интерпретатора, созданного с помощью команды ::safe::interpCreate или инициированного с помощью команды ::safe::interpInit в родительском интерпретаторе создается список доступных каталогов — виртуальный путь. Каждый каталог в пути связывается с реальным каталогом локальной файловой системы и с меткой, доступной в безопасном интерпретаторе. В результате надежный интерпретатор обходится без сведений о реальной файловой системе на машине, на которой исполняется интерпретатор. Когда в надежном интерпретаторе используется метка для доступа к конкретному файлу (например, для выполнения команды source или load), метка заменяется в родительском интерпретаторе на настоящее имя каталога и необходимый файл ищется в файловой системе. Надежный интерпретатор не получает сведений о реальном имени файла в файловой системе. Для работы с виртуальными именами файлов предусмотрены специальные команды. Команда::safe::interpConfigure позволяет задавать новый виртуальный путь для интерпретатора. Команда ::safe::interpAddToAccessPath позволяет добавлять каталоги к виртуальному пути указанного безопасного интерпретатора. Команда ::safe::interpFindInAccessPath позволяет найти каталог в виртуальном пути для безопасного интерпретатора и получить его метку. Если каталог не найден, выдается сообщение об ошибке.
Команда ::safe::setLogCommand
позволяет задать скрипт, который выполняется при каждом событии в безопасном
интерпретаторе. Этот скрипт вызывается с одним аргументом — строкой, содержащей
описание события.
source fileName
file?options?
::safe::interpCreate?slave??options...?
::safe::interpFindInAccessPathslave
directory
Пример использования команды:
###Создание безопасного интерпретатора
::safe::interpCreate qqq
###Присваивание переменной tk_library метки
соответствующего каталога
qqq eval [list set tk_library [::safe::interpFindInAccessPath
qqq $tk_library]]
###Выполнение команды source в безопасном
интерпретаторе
qqq eval source \$tk_library/msgbox.tcl
::safe::setLogCmd puts stderr
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
-accessPath?directoryList?
Чтобы исключить доступ к файлам, которые оказались в силу тех или иных причин в разрешенных для чтения в безопасном интерпретаторе каталогах, синоним команды source обеспечивает доступ только к файлам с расширением tcl, в именах которых содержится ровно одна точка, а общая длина имени не превышает четырнадцати символов.
По умолчанию в Tcl переменной auto_path
содержатся метки для каталогов, содержащихся в аналогичной переменной в
родительском интерпретаторе и их непосредственных подкаталогов. Первая метка
в списке присваивается также Tcl переменной tcl_library безопасного
интерпретатора. Вы можете сократить этот список, в явном виде задав доступные
каталоги для безопасного интерпретатора с помощью опции -accessPath.
Safe Tcl — это механизм безопасного исполнения ненадежных Tcl скриптов и предоставления этим скриптам опосредованного доступа к потенциально опасным функциям.
Safe Tcl служит для того, чтобы ненадежные скрипты не смогли нарушить работу вызывающего их приложения: он предотвращает покушения на несанкционированный доступ к информации и нарушение целостности вызывающего этот скрипт процесса.
Safe Tcl позволяет интерпретатору-предку создавать безопасные интерпретаторы с ограниченными возможностями, в которых содержится набор предопределенных синонимов для команд source, load, file и exit и сохраняются возможности автозагрузки команд и пакетов.
Безопасный интерпретатор не позволяет получить какую-либо информацию о структуре файловой системы, поскольку для доступа к файлам в безопасном интерпретаторе используются специальные метки. Когда безопасный интерпретатор запрашивает доступ к файлу, он использует метку как часть виртуального имени файла. Родительский интерпретатор заменяет метку на реальное имя каталога и выполняет требуемую операцию с файлом. С помощью опций команд, описанных ниже, можно выбрать требуемый уровень безопасности интерпретатора.
Все команды для работыс безопасными интерпретаторами
содержатся в пространстве имен safe. Команда ::safe::interpCreate
создает безопасный интерпретатор. Возможные опции команды описаны ниже,
см. “Опции”.
Команда возвращает имя созданного интерпретатора.
Команда ::safe::interpInit аналогична, но ее первым аргументом должно
быть имя интерпретатора, созданного с помощью команды interp.
Команда ::safe::interpDelete удаляет интерпретатор, имя которого
использовано в качестве аргумента. Команда ::safe::interpConfigure
позволяет задать опции для безопасного интерпретатора или получить информацию
об заданных ранее опциях. Подробноопции описаны ниже (см. “Опции”).
Для каждого безопасного интерпретатора, созданного с помощью команды ::safe::interpCreate или инициированного с помощью команды ::safe::interpInit в родительском интерпретаторе создается список доступных каталогов — виртуальный путь. Каждый каталог в пути связывается с реальным каталогом локальной файловой системы и с меткой, доступной в безопасном интерпретаторе. В результате надежный интерпретатор обходится без сведений о реальной файловой системе на машине, на которой исполняется интерпретатор. Когда в надежном интерпретаторе используется метка для доступа к конкретному файлу (например, для выполнения команды source или load), метка заменяется в родительском интерпретаторе на настоящее имя каталога и необходимый файл ищется в файловой системе. Надежный интерпретатор не получает сведений о реальном имени файла в файловой системе. Для работы с виртуальными именами файлов предусмотрены специальные команды. Команда ::safe::interpConfigure позволяет задавать новый виртуальный путь для интерпретатора. Команда ::safe::interpAddToAccessPath позволяет добавлять каталоги к виртуальному пути указанного безопасного интерпретатора. Команда ::safe::interpFindInAccessPath позволяет найти каталог в виртуальном пути для безопасного интерпретатора и получить его метку. Если каталог не найден, выдается сообщение об ошибке.
Команда ::safe::setLogCommand позволяет
задать скрипт, который выполняется при каждом событии в безопасном интерпретаторе.
Этот скрипт вызывается с одним аргументом — строкой, содержащей описание
события.