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? |