Restritopython.

restritopython fornece um ambiente de execução restrito para Python, e. para executar o código não confiável.
Baixe Agora

Restritopython. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • ZPL
  • Preço:
  • FREE
  • Nome do editor:
  • Zope Corporation and Contributors
  • Site do editor:
  • http://zope org

Restritopython. Tag


Restritopython. Descrição

RestrictedPython fornece um ambiente de execução restrito para Python, v.g. para a execução de código não confiável. RestrictedPython é uma biblioteca Python que fornece uma função restricted_compile que funciona como o built-in função de compilação, exceto que ele permite a execução controlada e restrita de código: >>> src = ''' ... def hello_world (): .. . retornar "Olá mundo!" ... ''' >>> from RestrictedPython importação compile_restricted >>> code = compile_restricted (src, '', 'exec') O código resultante pode ser executado usando o exec built-in: >>> exec (código) Como resultado, a função hello_world está agora disponível no espaço global: >>> hello_world () 'Olá mundo!' Implementação de um policyRestrictedPython só fornece a matéria-prima para a execução restrito. Para realmente impor quaisquer restrições, você precisa fornecer uma implementação de políticas, fornecendo versões restritas de impressão, getattr, setattr, importação, etc. Essas implementações restritas estão ligados, fornecendo um conjunto de objetos especialmente nomeados na dict global que você usa para execução de código. Especificamente: 1. _print_ é um objeto que pode ser chamado que retorna um manipulador para instruções de impressão. Este manipulador deve ter um método write () que aceita um único argumento de string, e deve retornar uma string quando chamado. RestrictedPython.PrintCollector.PrintCollector é uma aplicação apropriada. 2. _write_ é uma função de guarda toma um único argumento. Se o objeto passado para ele pode ser escrito, deve ser devolvido, caso contrário, a função de guarda deve gerar uma exceção. _write normalmente é chamado em um objeto antes de uma operação setattr. 3. _getattr_ e _getitem_ são funções de guarda, cada um dos quais tem dois argumentos. O primeiro é o objecto de base a ser acedido, enquanto que o segundo é o nome de atributo ou índice de produto que vai ser lido. A função de guarda deve retornar o atributo ou subitem, ou levantar uma exceção. 4. __import__ é o gancho importação normal Python, e deve ser usado para controlar o acesso a pacotes e módulos Python. 5. __builtins__ é dicionário do normal do Python builtins, que devem ser eliminados para baixo a um conjunto que não pode ser usado para contornar suas restrições. Um conjunto utilizável "seguro" é RestrictedPython.Guards.safe_builtins.To ajudam a ilustrar como funciona este sob as cobertas, aqui está um exemplo de função: def f (x): x.foo = x.foo + x print x retorno printedand (tipo de) como parece após a compilação restrito: def f (x): # Faça variáveis locais de globals. _print = _print_ () _write = _write_ _getattr = _getattr_ _getitem = _getitem_ # Tradução de f (x) acima _write (x) = .foo _getattr (x, 'foo') + _getitem (x, 0) imprimir >> _ impressão, x _print return () apoio ExamplesprintTo a declaração de impressão em código restrito, nós fornecemos um objeto _print_ (note que é uma fábrica, por exemplo, uma classe ou um que pode ser chamado, a partir do qual o mecanismo restrito irá criar o objeto): >>> from RestrictedPython.PrintCollector importação PrintCollector >>> _print_ = PrintCollector >>> src = ''' ... print "Olá mundo!" ... ''' >>> code = compile_restricted (src, '', 'exec') >>> exec (código) Como você pode ver, o texto não aparece no stdout. O coletor de impressão recolhe-lo. Podemos ter acesso ao texto usando a variável impressa, no entanto: 'Olá Mundo!' >>> src = ''' ... print ... result = impressa ... '' '>>> code = compile_restricted (src, '', 'exec') >>> exec (código) >>> resultado' Olá mundo! 'Built-insBy fornecer um dicionário __builtins__ diferente, nós podemos descartar operações inseguras, como arquivos de abertura: >>> from RestrictedPython.Guards importar safe_builtins >>> restricted_globals = dict (__ builtins__ = safe_builtins) >>> src = ''' ... open ( '/ etc / passwd') ... ''' >>> code = compile_restricted (src, '', 'exec') >>> exec (código) em restricted_globals Traceback (chamada mais recente passada) : ... NameError: nome 'aberto' não é do definedGuardsHere um exemplo de um guarda de gravação que nunca deixa código restrito modificar (Atribuir, excluir um atributo ou item), exceto dicionários e listas: >>> from RestrictedPython.Guards importar full_write_guard >> > _write_ = full_write_guard >>> _getattr_ = getattr >>> class BikeShed (objeto): ... color = 'verde' ... >>> galpão = BikeShed () Normalmente acesso attriutes obras como esperado, porque nós estamos usando a função getattr padrão para o guarda _getattr_: >>> src = '' '... print shed.colour ... result = impressa ... ''' >>> code = compile_restricted (src, '', ) >>> exec (código) >>> resultado 'verde 'exec' 'No entanto, alterar um atributo não funciona: >>> src =' '' ... shed.colour = 'Red' ... '' '' >>> Código = Compile_Restritted (SRC ',' ',' EXEC '' ) >>> Exec (Código) Traceback (mais recente chamada por último): ... TypeError: Atributo Menor Objeto (Atribuir ou Del) Como disse, este específico de gravação (Full_write_guard) permitirá que o código restrito modifique listas e dicionários modificados: >>> Fibonacci = >>> TRIB = dict (um = 1, dois = 2, tres = 3) >>> src = '' '... # correto erro em Lista ... Fibonacci = 5 ... # Um item não pertence ... Del Tirk ... '' >>> Código = Compile_Restrited (SRC, '', '' ' EXEC ') >>> Exec (Código) >>> Fibonacci >>> Tradr.keys ()) Requisitos: · Pitão O que há de novo nesta versão: · Adicionado testes para o módulo de utilitários. · Reponação filtradaVezes ao importar o módulo de conjuntos do Python.


Restritopython. Software Relacionado

liblasi.

liblasi é uma biblioteca simples que fornece uma interface de saída de fluxo C ++ para criar documentos PostScript. ...

137

Download

Quer

Quer é um módulo Perl criado para implementar o comando `deseja '. ...

255

Download

Domingo.

Domingo é uma interface fácil de usar simples, consistente e orientada a objetos para o Lotus Notes / Domino Java-API. ...

175

Download