Next Previous Contents

13. <4.1>: Tainting - besudlede data

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


Next Previous Contents