Note: Testo rimosso dalla rev 1  e Testo aggiunto nella rev2

Perl ha un concetto interessante che è quello del “tainting”, ovvero il fatto di poter considerare l’input dell’utente come inquinato e quindi trattarlo in modo differente da una stringa interna al codice. E’ un po’ razzista, ma è utile per evitare che si finisca con un system("rm -f /").

Ruby migliora questoi concetto introducendo l’idea dei SAFE level. La variabile globale $SAFE può assumere un valore nell’intervallo 0..11, e ad ogni livello introduce delle nuove protezioni. Ad esempio, al livello 1 non si può fare eval() o system su una stringa tainted. Al livello 3 ogni nuovo oggetto viene considerato inquinato, anche se creato all’interno del programma, ed al livello 4 non è più neanche possibile modificare oggetti esistenti.

Gli altri livelli sono lasciati liberi per l’utente, anche se non sono praticamente mai usati (tranne che in plruby, ruby come linguaggio embedded in pgsql).

Notate anche che la variabile $SAFE è thread local, il che significa che potete creare delle sandbox, come mostrato qui

Per maggiori info: http://www.rubycentral.com/book/taint.html

Created on November 30, 2005 00:59 by Gabriele Renzi (151.37.158.94)