4 Stimmen

IronPython - Wie man verhindert, dass CLR (und andere Module) importiert werden

Ich richte eine Webanwendung ein, um IronPython für das Skripting verschiedener Benutzeraktionen zu verwenden, und ich werde verschiedene Geschäftsobjekte für den Zugriff durch das Skript bereitstellen. Ich möchte es dem Benutzer unmöglich machen, die CLR oder andere Baugruppen zu importieren, um die Fähigkeiten des Skripts einfach zu halten und auf die Funktionalität zu beschränken, die ich in meinen Geschäftsobjekten bereitstelle.

Wie kann ich verhindern, dass die CLR und andere Baugruppen/Module importiert werden?

2voto

Alan Macdonald Punkte 1824

Dies würde Importe sowohl von Python-Modulen als auch von .Net-Objekten verhindern und ist daher möglicherweise nicht das, was Sie wollen. (Ich bin relativ neu in Python, so dass ich einige Dinge als auch fehlen könnte):

Richten Sie die Umgebung ein. Importieren Sie alles, worauf der Benutzer Zugriff haben muss. Entweder dem Skript voranstellen oder ausführen:

__builtins__.__import__ = None #Stops imports working
reload = None #Stops reloading working (specifically stops them reloading builtins
              #giving back an unbroken __import___!

und führen dann ihr Skript aus.

1voto

Robert Harvey Punkte 173098

Sie müssen das Skript nach den Importen durchsuchen, die nicht verwendet werden sollen, und das Skript in seiner Gesamtheit ablehnen, wenn es welche davon enthält.

Grundsätzlich wird das Skript abgelehnt, wenn es Assembly.Load, import oder AddReference enthält.

1voto

Rohit Punkte 7099

Möglicherweise möchten Sie den Schutz mit Microsofts Code Access Security . Ich selbst bin nicht vollständig bewusst, seine Funktionsweise (oder wie man es mit IPy arbeiten), aber es ist etwas, das ich glaube, Sie sollten in Betracht ziehen.

Es gibt eine Diskussionsfaden auf der IPy-Mailingliste die Sie sich vielleicht ansehen möchten. Die gestellte Frage ist ähnlich wie die Ihre.

0voto

Dino Viehland Punkte 6428

Wenn Sie bestimmte eingebaute Module deaktivieren möchten, würde ich vorschlagen, eine Funktionsanfrage auf ironpython.codeplex.com zu stellen. Dies sollte einfach genug zu implementieren sein.

Andernfalls könnten Sie einfach entweder Importer.cs ansehen und den Import dort verbieten oder Sie könnten einfach ClrModule.cs aus IronPython löschen und neu erstellen (und möglicherweise alle Verweise darauf entfernen).

0voto

Für den Fall, dass jemand über Google auf diesen Thread stößt (so wie ich) Ich habe es geschafft, "import clr" in Python-Skripten zu deaktivieren, indem ich die Zeile auskommentiert habe

//[assembly: PythonModule("clr", typeof(IronPython.Runtime.ClrModule))]

in ClrModule.cs, aber ich bin nicht davon überzeugt, dass dies eine vollständige Lösung ist, um unerwünschten Zugriff zu verhindern, da Sie immer noch Dinge wie die Datei builtin überschreiben müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X