Wie können Benutzer sicher beliebigen Ruby-Code ausführen?

8

Mir ist klar, dass das ein bisschen verrückt klingt, aber ich arbeite an einem Projekt, für das ich einen Server brauche, um vom Benutzer bereitgestellten Ruby-Code auszuführen und das Ergebnis zurückzugeben.

Ich möchte etwas wie das verhindern:

%Vor%

Ich bin mir sicher, dass es einen einigermaßen sicheren Weg dafür geben muss, da es bereits an Orten wie tryruby.org existiert. Jede Hilfe wird sehr geschätzt, danke!

    
igul222 03.04.2010, 23:19
quelle

4 Antworten

6

Drei Vorschläge:

1) Werfen Sie einen Blick auf die Fehlerstufen . Dies bietet ein gewisses Maß an Schutz gegen, eval('evil_code') Art Dinge, etc.

2) Wenn der Benutzer keinen Zugriff auf das lokale Dateisystem benötigt, verwenden Sie etwas wie ficefs

3) Egal was Sie sonst noch tun folgen Sie Tronic's Vorschlag (kann ein Problem beim Setup sein, aber begrenzte chroot jails sind die einzige Möglichkeit, absolut sicher zu gehen, dass Benutzer nicht auf Ressourcen zugreifen können, die Sie nicht explizit wollen).

    
ig0774 03.04.2010, 23:43
quelle
3

Führen Sie das Programm ptraced mit einer Whitelist von erlaubten syscalls, als user / group nobody, mit Ressourcenlimits (Speicherauslastung usw.) in einer minimalen Chroot aus.

    
Tronic 03.04.2010 23:26
quelle
2

Ein "unbeschriebenes Blatt" ist ein Objekt, dessen Methoden entfernt wurden. Ein "Reinraum" ist ein Objekt, in dem Sie potenziell unsichere Räume bewerten. Wenn Sie den Code in einem "Reinraum" auswerten, der auch ein "unbeschriebenes Blatt" ist, und das sichere Niveau so hoch wie möglich ansteigen lässt, werden Sie sich einen großen Schutz leisten. Nichts in der Sicherheit ist sicher, also sollte dies als eine Schicht in Ihrer Sicherheit betrachtet werden, nicht unbedingt die only Schicht.

Diese Antwort zeigt, wie es geht .

    
Wayne Conrad 04.04.2010 00:52
quelle
0

Ich hatte das gleiche Problem, bin dann aber auf eval.so gestoßen und habe beschlossen, dafür einen API-Wrapper zu schreiben, der Sandy . Es ist so einfach wie:

%Vor%

Es unterstützt auch eine ganze Reihe anderer Sprachen wie C #, Perl, Lua und Java.

    
raf 08.12.2013 11:34
quelle

Tags und Links