Segurança
Ruby tem um modelo de segurança bastante simples, similar ao de Perl e
JavaScript, chamado data tainting ("corrupção de dados"). Qualquer dado
vindo de "ambiente possivelmente hostil" (dados fornecidos pelo usuário,
principalmente), é marcado como "corrupto" (tainted), e esse dado não
pode mais ser usado para certas operações, como por exemplo, executar um comando
externo, inadvertidamente. A variável global $SAFE indica o nível
de segurança. A seguinte tabela indica os níveis existentes:
- 0 - (padrão) strings de streams, variáveis de ambiente (env), e ARGV são corruptas
- 1 - nenhuma operação perigosa com objetos corruptos é permitida
- 2 - operações com processos ou arquivos são proibidas
- 3 - todos os objetos criados são corruptos
- 4 - modificação de variáveis globais (não corruptas) proibida; saída de dados direta proibida
A variável $SAFE só pode ser incrementada, nunca
decrementada.
Referências:
- Seção "Locking Ruby in the Safe" do livro Programming Ruby
- Manual de segurança de Perl ("man perlsec")