Next Previous Contents

14. <4.2>: $SAFE-nivåer

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.


Next Previous Contents