Tcl/Tk: Renomear e remover comandos

Tcl/Tk tem propriedades camaleônicas. Praticamente tudo pode ser modificado, o que pode resultar na criação de uma linguagem quase inteiramente nova. Por exemplo, se você não gostar do comando nativo [puts] porque está muito acostumado com ‘echo’, pode mudar o nome do comando:

% puts "Alô, mamãe!"
Alô, mamãe!

% rename puts echo

% puts "Alô, mamãe!"
invalid command name "puts"

% echo "Alô, mamãe!"
Alô, mamãe!

Se o segundo argumento de [rename] for a string vazia em vez de um nome novo para o comando a ser renomeado, o comando é apagado!

% rename echo {}

% echo "Alô, mamãe!"
invalid command name "echo"

Você pode querer “matar” alguns comandos em programas/scripts que aceitem dados digitados pelo usuário. Sem determinados comandos, o programa fica mais seguro.

This entry was posted in Tcl-Tk and tagged , , , , . Bookmark the permalink.

2 Responses to Tcl/Tk: Renomear e remover comandos

  1. Nossa… Realmente camaleônicas.
    Interessante, me deu vontade de aprender a programar nisso, vou continuar lendo os posts dessa série…

    Você pode querer “matar” alguns comandos em programas/scripts que aceitem dados digitados pelo usuário. Sem determinados comandos, o programa fica mais seguro.

    Já deste ponto eu discordo. Não se deve tirar a liberdade do usuário, já que ele roda um programa por sua conta e risco em sua própria máquina.

  2. LES says:

    Oi, Tiago. Só vi hoje o seu comentário. Preciso consultar o Aurélio sobre como receber avisos quando alguém comentar.

    A liberdade de um mero usuário é diferente da liberdade do autor ou administrador. Se o tal “usuário” for autor ou administrador do programa e tiver acesso ao código, ele põe e tira o que quiser.

    Eu me referia a situações em que o usuário só usa o programa, não tem acesso ao código. Por exemplo, um formulário de site que use Tcl como linguagem CGI. Imagine que o usuário preencha “[exec rm -rf ./]” em um dos campos e aperte o botão Enviar. Se você já programa, deve ter uma boa idéia do que faz o comando [exec] e de quanto estrago ele pode fazer. Se você apagar o comando [exec], pelo menos este perigo é evitado. Existem inúmeras maneiras de validar o que é digitado pelo usuário, e UMA delas é castrar a linguagem.

    Na verdade, isso tudo foi só um exemplo muito simplificado moldado para o escopo ultra resumido do Codare. A maneira mais certa de se castrar a linguagem é usando *interpretadores seguros*. Resumindo: todas as outras linguagens que eu conheço têm um interpretador só executando o script inteiro, mas Tcl permite criar vários interpretadores paralelos, cada um deles completamente isolado e independente e com características próprias. É como ter várias Tcl dentro da Tcl, cada uma diferente se você quiser. Você pode criar um interpretador “capado” só para determinadas tarefas se achar melhor. É um modelo de segurança muito interessante. Se você quiser saber mais, vai ter que pesquisar. :-) Comece procurando por [interp create -safe].

Comments are closed.