Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Ausnahme auslöst noch das Programm beendet.
    sleep
ist eine weitere verwandte Funktion, die nicht dafür sorgt, dass das Programm beendet wird. Stattdessen sorgt die Methode einfach dafür, dass das Programm (oder zumindest der aktuelle Thread des Programms) für die angegebene Anzahl von Sekunden pausiert.

10.5 Sicherheit
    Rubys Sicherheitssystem stellt einen Mechanismus zum Schreiben von Programmen zur Verfügung, die mit nicht vertrauenswürdigen Daten und nicht vertrauenswürdigem Code arbeiten. Das Sicherheitssystem hat zwei Teile. Der erste ist ein Mechanismus zum Unterscheiden zwischen sicheren Daten und nicht vertrauenswürdigen Daten oder Taint -Daten. Der zweite ist ein Verfahren zur eingeschränkten Ausführung ( restricted execution ), das es Ihnen erlaubt, die Ruby-Umgebung »abzuschließen«, und das den Ruby-Interpreter daran hindert, potenziell gefährliche Operationen mit Taint-Daten durchzuführen. Dies dient dazu, Dinge wie SQL Injection-Attacken zu verhindern, bei denen boshafte Eingabedaten das Verhalten eines Programms verändern. Die eingeschränkte Ausführung kann noch einen Schritt weiter gehen, so dass nicht vertrauenswürdiger (und möglicherweise schädlicher) Code ausgeführt werden kann, ohne dass Sie Angst haben müssten, dass er Dateien löscht, Daten stiehlt oder anderweitig Schaden anrichtet.
    10.5.1 Taint-Daten
    Jedes Objekt in Ruby ist entweder ein Taint-Objekt oder ein Nicht-Taint-Objekt. Literale Werte im Programmquellcode sind Nicht-Taint-Objekte. Werte, die aus der externen Umgebung stammen, sind Taint-Objekte. Dazu gehören Strings, die von der Kommandozeile gelesen werden (
ARGV
), Umgebungsvariablen (
ENV
) sowie sämtliche aus Dateien, Sockets und anderen Datenströmen gelesenen Daten. Die Umgebungsvariable
PATH
ist ein Sonderfall: Sie ist nur dann ein Taint-Wert, wenn ein oder mehrere der enthaltenen Verzeichnisse allgemeine Schreibrechte besitzen. Wichtig ist, dass der Taint-Zustand ansteckend ist, so dass Objekte, die von Taint-Objekten abgeleitet werden, ebenfalls Taint-Objekte sind.
    Die
Object
-Methoden
taint
,
tainted?
und
untaint
erlauben Ihnen, ein Nicht-Taint-Objekt als Taint-Objekt zu markieren, den Taint-Zustand eines Objekts zu überprüfen und ein Taint-Objekt zu einem Nicht-Taint-Objekt zu machen. Letzteres sollten Sie nur tun, wenn Ihr Code das Objekt inspiziert und festgestellt hat, dass es trotz seiner unbekannten Herkunft oder Ableitung sicher ist.
    10.5.2 Eingeschränkte Ausführung und Sicherheitsstufen
    Ruby kann Programme mit eingeschalteter Sicherheitsprüfung ( security checking ) ausführen. Die globale Variabe
$SAFE
bestimmt die Stufe der Sicherheitsprüfung. Die Standardsicherheitsstufe ist normalerweise 0, wird aber für Ruby-Programme, die mit setuid oder setgid ausgeführt werden, auf 1 gesetzt. (Dies sind Unix-Begriffe für ein Programm, das mit höheren Berechtigungen als denjenigen des Benutzers läuft, der es aufruft.) Zulässige Sicherheitsstufen sind die Integer 0, 1, 2, 3 und 4. Mit der Kommandozeilenoption
-T
des Ruby-Interpreters können Sie die Sicherheitsstufe explizit setzen. Sie können die Sicherheitsstufe auch durch Wertzuweisung an
$SAFE
einstellen. Beachten Sie jedoch, dass Sie den Wert nur erhöhen können – es ist niemals möglich, diesen Wert zu vermindern:
$SAFE=1 # Sicherheitswert erhöhen
$SAFE=4 # Sicherheitswert noch weiter erhöhen
$SAFE=0 # SecurityError! Das geht nicht.
    $SAFE
ist Thread-lokal. Der Wert
$SAFE
von kann mit anderen Worten geändert werden, ohne den Wert in anderen Threads zu beeinflussen. Mithilfe dieses Features können Threads für nicht vertrauenswürdige Programme in einer Sandbox ausgeführt werden:
Thread.start { # Einen "Sandbox"-Thread erzeugen
$SAFE = 4 # Ausführung nur in diesem Thread einschränken
... # Hier kann nicht vertrauenswürdiger Code laufen.
}
    Diese Diskussion über Rubys Sicherheitsstufen gilt nur speziell für die Referenzimplementierung. Bei anderen Implementierungen kann alles anders sein. Insbesondere JRuby macht (zum Zeitpunkt dieser Übersetzung) nur sehr beschränkt Versuche, die Modi der eingeschränkten Ausführung aus der Referenzimplementierung zu implementieren. Behalten Sie außerdem im Hinterkopf, dass Rubys Sicherheitsmodell noch nicht derselben gründlichen und langwierigen Praxisprüfung ausgesetzt war wie Javas Sicherheitsarchitektur. Die nachfolgenden Unterabschnitte beschreiben, wie die eingeschränkte Ausführung in Ruby funktionieren soll, aber

Weitere Kostenlose Bücher