En av de store sikkerhetsfarene er eksterne data: Alt av informasjon som kommer fra brukeren kan potensielt være livsfarlig, skrevet med bare den hensikt å ødelegge dagen din.
Ruby tilbyr en mekanisme som merker alle data fra eksterne kilder: tainting
. Det antyder hvorvidt data er "besudlet" eller "smittebærende", slik at du ikke kan stole på dem lenger enn du kan kaste dem.
1| print 'Skriv noe inn og trykk Return: ' 2| 3| # Brukerdata er svart som kull... 4| skitten = gets 5| puts 'Skitten brukerdata.' if skitten.tainted? 6| 7| pur = 'Literal data, hvit som sne.' 8| puts pur if not pur.tainted? 9| 10| # Tainting sverter av på andre objekter som lages med 11| # utgangspunkt i besudlede data. 12| puts 'Sverter av!' if (pur+skitten).tainted? 13| 14| # Vi kan gjøre ting eksplisitt tainted... 15| pur.taint 16| # ..og renvaske skitten data (dersom vi får lov). 17| pur.untaint |
Dette fungerer dog kun som øremerking og har lite innvirkning før det settes i en sammenheng hvor statusen tas hensyn til. Vi skrur opp paranoiaen et hakk og går til DefCon-1...