Next Previous Contents

21. <6.2.1>: Tråder som sandkasser

Tråder kan også brukes som sikre(re?) sandkasser. Husker du $SAFE-variabelen fra tidligere? Den er ikke en global variabel, men en tråd-lokal variabel. Hver tråd har sitt eget sikkerhetsnivå, og det kan vi benytte oss av for å kjøre "skumle" kodebiter i en noe tryggere "sandkasse".

  1| # Pakker sandkasselekingen i en metode slik at det 
  2| # ikke vil være (mange) variabler tilgjengelig i konteksten.
  3| def sandkasse_lek( kode )
  4|   sandkasse = Thread.new do
  5|     # "evil" eval kan være skummel, så la oss være paranoide.
  6|     $SAFE = 4   # Nivå 1-3 lar oss ikke bruke eval på  
  7|     eval kode   # besudlet data, men det gjør nivå 4!
  8|   end
  9|   print 'Koden din returnerte: ', sandkasse.value.inspect, "\n"
 10| end
 11| 
 12| begin
 13|   print 'Skriv inn vilkårlig Ruby-kode: '
 14|   kildekode = gets.chomp              # Brukerdata er tainted.
 15|   sandkasse_lek( kildekode )
 16| end while kildekode.size.nonzero?


Next Previous Contents