next up previous contents index
Search Next: Eine Sandbox für Ruby-Programme Up: Sicherheit (nicht nur) fürs Previous: Sicherheit (nicht nur) fürs   Contents   Index

Sicherheitsstufen

Ruby hat von Haus aus einen "`Schutzmechanismus"' eingebaut. Mit der Thread-lokalen Variablen $SAFE[*] kann zwischen vier unterschiedlich restriktiven Sicherheitsebenen gewechselt werden, allerdings nur in Richtung zu stärkeren Einschränkungen. Außerdem enthalten die höheren Stufen alle Einschränkungen der niedrigeren Stufen.


Table: Einschränkungen durch $SAFE
$SAFE Einschränkung
0 Keine Prüfung. Ruby-Standard.
>=1 Kein Zugriff auf markierte (tainted) Objekte durch "`heikle"' Methoden (Ein- und Ausgabe, Prozessverwaltung).
>=2 Ruby verhindert das Laden von Programmen aus schreibbaren Verzeichnissen.
>=3 Alle neuen Objekte werden sofort markiert (tainted).
>=4 Nicht markierte Objekte dürfen nicht mehr geändert werden.

$SAFE       #-> 0, alles ist möglich
$SAFE = 3   #-> 3, jetzt wird's eng
$SAFE = 0   #-> SecurityError, geht nicht mehr

Um die Sicherheitsmechanismen verstehen zu können, muss der aus Perl entlehnte Begriff "`tainted"'[*] (verschmutzt) herangezogen werden. Objekte, die aus "`nicht vertrauenswürdigen"' Quellen entstehen - darunter fällt alles, was nicht aus dem Programm selbst kommt -, werden automatisch als "`tainted"' markiert. Jedes von ihnen abgeleitete Objekt ist wiederum "`tainted"'. Diese Klassifizierung wird von Ruby automatisch vorgenommen, unabhängig von der aktuellen Sicherheitsstufe.

input = STDIN.gets
input.tainted?         #-> true
str = "Hallo"
str.tainted?           #-> false
str.taint  
str.tainted?           #-> true
part = str[0,2]
part.tainted?          #-> true



Footnotes

... $SAFE[*]
Ruby kann nur sicherer werden
...verschmutzt[*]
tainted = verschmutzt

next up previous contents index
Search Next: Eine Sandbox für Ruby-Programme Up: Sicherheit (nicht nur) fürs Previous: Sicherheit (nicht nur) fürs   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20