I Ruby finnes det en spesiell variabel $SAFE
som angir sikkerhetsnivået, med verdier fra 0 til 4. (Se i
Programming Ruby kapittelet om
nedlåsing av Ruby for detaljer.)
Vanlige Ruby programmer kjører normalt med $SAFE==0
og eruby skript med $SAFE==1
per default, men det kan stilles på i konfigurasjonen. Man kan øke sikkerhetsnivået, men aldri senke det.
1| puts "$SAFE == #{$SAFE}" 2| 3| def les_fil( filnavn ) 4| File.open(filnavn) do |fil| 5| print fil.read.size, " bytes lest.\n" 6| end 7| end 8| 9| filnavn = "/etc/hosts" 10| 11| # Eksempel på potensielt farlig operasjon. 12| les_fil( filnavn ) 13| 14| # La oss simulere en ekstern kilde og øke paranoiaen litt. 15| filnavn.taint 16| $SAFE = 1 17| 18| begin 19| les_fil( filnavn ) 20| rescue SecurityError => sec_err 21| puts sec_err #=> "Insecure operation - initialize" 22| end |
Men hva gjør vi med en besudlet String
da? For $SAFE
-nivåer under 3, kan man gjøre litt "vasking" av dataene og så kalle untaint
. For nivå 3 og oppover går det derimot ikke å kalle untaint
på objekter.