Definition der Safe-Levels$SAFE >= 1- Die Umgebungs-Variablen
RUBYLIB und RUBYOPT werden nicht ausgewertet
und das aktuelle Verzeichnis wird nicht zum Pfad hinzugefügt.
- Die Kommandozeilen-Optionen
-e , -i , -I , -r ,
-s , -S und -x sind nicht erlaubt.
- Man kann keine Prozesse aus
$PATH starten, falls irgendein Verzeichnis
darin global beschreibbar ist.
- Man kann ein Verzeichnis, dessen Name ein tainted String ist, nicht
manipulieren und auch kein chroot darauf ausführen.
- Für tainted Strings kann man kein glob ausführen.
- Für tainted Strings kann man kein eval ausführen.
- Man kann keine Datei laden oder mit require einbinden, deren Name ein tainted
String ist.
- Keine Manipulation oder Abfrage auf eine Datei oder Pipe, deren Name ein
tainted String ist.
- Keine Ausführung eines System-Kommandos oder eines Programms über einen
tainted String.
- Man kann an
trap keinen tainted String übergeben.
$SAFE >= 2- Man kann keine Verzeichnisse ändern, erzeugen oder entfernen, man kann auch nicht
chroot benutzen.
- Man kann keine Datei aus einem global beschreibbaren Verzeichnis laden.
- Man kann keine Datei laden über einen tainted Dateinamen, der mit ~ anfängt.
- Folgendes kann man nicht benutzen
File#chmod ,
File#chown ,
File#lstat ,
File.stat ,
File#truncate ,
File.umask ,
File#flock ,
IO#ioctl ,
IO#stat ,
Kernel#fork ,
Kernel#syscall ,
Kernel#trap .
Process::setpgid ,
Process::setsid ,
Process::setpriority oder
Process::egid= .
- Signale kann man nicht mit
trap abhandeln.
$SAFE >= 3- Alle Objekte werden als tainted erzeugt.
- Man kann die Taint-Markierung nicht entfernen.
$SAFE >= 4- Man kann keine Arrays, Hashes oder Strings ohne taint verändern.
- Keine Änderungen an globalen Variablen.
- Kein Zugriff auf Instanz-Variablen ohne taint.
- Keine Änderungen an Umgebungsvariablen.
- Kein Schließen oder Wiederöffnen von Dateien ohne taint.
- Kein Freeze für Objekte ohne taint.
- Keine Änderungen an der Sichtbarkeit von Methoden (private/public/protected).
- Kein Alias in einer Klasse oder einem Modul ohne taint.
- Keine Meta-Informationen (wie etwa Methoden- oder Variablen-Listen).
- Kein Definieren, Umdefinieren, Entfernen oder Undefinieren von Methoden in einer Klasse ohne
taint oder einem Modul ohne taint.
- Keine Änderung an
Object .
- Keine Entfernung von Instanz-Variablen oder Konstanten aus Objekten ohne taint.
- Keine Manipulationen von Threads, kein Terminate für einen Tread außer dem aktuellen, kein
Setzen von
abort_on_exception .
- Es darf keine tread-lokalen Variablen mehr geben.
- Man kann keine exception in einem Thread mit einem geringeren
$SAFE -Wert auslösen.
- Man kann keine Threads in ThreadGroups bewegen.
- Man kann nicht mehr
exit , exit! oder abort aufrufen.
- Man kann nur noch gewrappte Dateien laden, man kann Module nicht mehr in Klassen ohne taint
oder Modulen ohne taint einbinden.
- Man kann keine Symbol-Namen mehr in Objekt-Referenzen konvertieren.
- Man kann nicht mehr in Dateien oder Pipes schreiben.
- Man kann
autoload nicht mehr benutzen.
- Man kann keine Objekte mehr mit taint markieren.
|