Ich habe ein Projekt, in dem ich Benutzern erlauben muss, beliebigen, nicht vertrauenswürdigen Python-Code ( ein bisschen wie diesen ) auf meinem Server auszuführen . Ich bin ziemlich neu in Python und möchte Fehler vermeiden, die Sicherheitslücken oder andere Schwachstellen in das System einführen. Gibt es Best Practices, empfohlene Lektüre oder andere Hinweise, die Sie mir geben können, um meinen Service nutzbar zu machen, aber nicht missbräuchlich?
Folgendes habe ich bisher in Betracht gezogen:
- Entfernen Sie
__builtins__
aus demexec
Kontext, um die Verwendung von potenziell gefährlichen Paketen wie zu verbietenos
. Benutzer können nur Pakete verwenden, die ich ihnen zur Verfügung stelle. - Verwenden Sie Threads, um eine angemessene Zeitüberschreitung zu erzwingen.
- Ich möchte die Gesamtmenge an Speicher, die im
exec
Kontext zugewiesen werden kann, begrenzen , bin mir aber nicht sicher, ob dies überhaupt möglich ist.
Es gibt einige Alternativen zu einer Straße exec
, aber ich bin mir nicht sicher, welche davon hier hilfreich wäre:
- Verwenden von an
ast.NodeVisitor
, um jeden Versuch, auf unsichere Objekte zuzugreifen, abzufangen. Aber welche Gegenstände soll ich verbieten? - Suche nach doppelten Unterstrichen in der Eingabe. (weniger anmutig als die oben genannte Option).
- Benutze
PyPy
oder ähnliches wie Sandbox den Code.
HINWEIS: Mir ist bekannt, dass es mindestens einen JavaScript-basierten Interpreter gibt. Das wird in meinem Szenario nicht funktionieren.