Sicheres exec in python3

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Manuelh87
User
Beiträge: 36
Registriert: Sonntag 15. März 2009, 16:24

@BlackJack: Wie kommst du zu deinen Behauptungen? Ich finde nicht, dass diese geplante Sandbox in Picklebuild 'nerven' würde... Picklebuild ist einfach ein anderes Konzept. Wenn du weiterhin ein configure Skript haben willst das Dateien erstellt, kannst du das neben Picklebuild ja verwenden (wie schon erwähnt). Wo ist hier bitte die Einschränkung?
Für die Art von Projekten, für die ich Picklebuild entwickelt habe, ist es nicht notwendig extra noch Dateien zu erstellen. Sollte irgendetwas in die Richtung nötig sein, dann wäre das im Kern drinnen und könnte wieder überwacht werden... Mir ist aber noch kein Szenario untergekommen wo ich das Nötig finden würde. Du hast natürlich recht, dass es andere Möglichkeiten gibt, Schadcode einzuschleußen. Ich hab aber vorallem Mikrokontroller Projekte im Auge welche nicht auf der kompilierenden Plattform ausgeführt werden. Natürlich ist es denkbar, einen Kompilierfehler auszunutzen etc... Aber du wirst mir vielleicht zustimmen, dass dies wesentlich mehr Aufwand darstellt, als einfach ein paar Zeilen Python Code in eine Datei schreiben die k.a. einen Haufen Dateien löschen.
Außerdem ist ein Unterschied, ob du nur die generierten Source Codes von picklebuild durschauen musst, oder auch noch die Konfigureskripts.

@deets: Ich will das ganze ja nicht nur für Picklebuild machen. Ich kann mir vorstellen, dass es auch vielleicht sonst für wen praktisch sein könnte. Ich versuche darauf Rücksicht zu nehmen, aber fürs erste hab ich mal einen Kompromiss aus gerade noch vorstellbar, und für mich nötig gemacht. Klassendefinitionen zuzulassen und dafür zu sorgen dass das dann noch sicher ist kann ich mir derzeit einfach nur schwer vorstellen. Wenn jemand das braucht, dann sollte er vielleicht mal PyPy ansehen, ob das virtual-env was taugt... Falls man aber nur bestimmte Objekte die (~ so wie bei exec globals und locals) von der Anwedung heraus an exec übergeben werden, modifizieren können soll, und dort auch nur bestimmte Funktionen aufrufen darf etc. dann ist mein Ansatz vielleicht brauchbar.
Also für picklebuild konkret, ist es einfach absolut unnötig die verbotenen Dinge zu tun... wenn das jemanden nervt, dann hat er das Konzept nicht verstanden. Das ist so, als regst du dich darüber auf, dass du von einem User-Process nicht in den supervisor Mode wechseln darfst. Das ist per Design nicht erwünscht. Pickelbuild nutzt nunmal das cfg objekt als "Tor nach Außen", bzw. gibt es die Möglichkeit, Extension Befehle hinzuzufügen, die z.b. so etwas ermöglichen... ich seh da nur keinen Anwendungsfall.

Mein Zielpublikum sind eher Einsteiger z.b. ins Programmieren eines Mikrokontrollers. Es soll für diese Leute möglich sein, einfach z.b. meine Source Codes runterzuladen, Picklebuild zu starten (da muss auch noch eine gui her, in Moment geht das nur über cmd-line). Dann steht dort drinnen was welcher Parameter macht, sie wählen z.b. aus wo bei ihnen das Display hängt, kompilieren den Code und es soll schon funktionieren.... Das ist das Ziel. Es soll natürlich auch für Leute wie euch verwendbar sein, die sich sehr gut auskennen, vielleicht die Steuerung über Konsole bevorzugen (Vielleicht in einem make file oder was auch immer). Und auch das schreiben von den Skripts sollte für Neulinge relativ leicht möglich sein. Es gibt nicht viele Befehle und ich werd, sobald ich wieder Zeit habe endlich eine Sphinx Dokumentation erstellen, die ganz einfach erklärt was man machen kann und wie.

Die sichere Umgebung muss einfach jetzt gemacht werden, da sie eben Einschränkungen mit sich bringt. Wenn ich das nicht mach, bevor ich ein "großes Release" mach, dann ärgern sich vielleicht Nutzer, dass ihre Skripts nichtmehr funktionieren. Wenn es von vorn herein z.b. keine Klassendefinitionen gibt, kann man (im Bezug auf Picklebuild) sehr gut damit leben, meine ich...

Zugegeben, es gibt nicht wirklich Nutzer :( kann ich auch verstehen, es ist alles noch recht unfertig. Trotzdem hoff ich, dass es vielleicht der eine oder andere Nützlich findet. Mit Picklebuild will ich einfach auch einen Beitrag zur Open Source Gemeinde leisten. Ich habe lange überlegt ob es nicht sinnvoller wäre, bei anderen Projekten mitzuhelfen, die schon benutzt werden. Aber es gab leider nicht ein Projekt hinter dem ich so stehen würde, wie ichs hinter Picklebuild tu, auch wenn ich vielleicht immer der einzige Nutzer davon sein werde ;p
Nehmt es mir also bitte nicht übel wenn ich vielleicht ein bisschen emotional werden wenns um Picklebuild geht... Ich bin allen sehr dankbar für ihre Beiträge...

cu Manuel
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

...uralt Thread rauskram...
jens hat geschrieben:Wenn es nur um Daten geht, die in Dicts, Lists, Tuples stecken (auch verschachtelt), dann ist evtl. mein data_eval aus dem django-dbpreferences Projekt interessant: https://github.com/jedie/django-dbprefe ... ta_eval.py

Oder aber JSON nehmen?
"Data eval" hatte vor Jahren einzug in django-dbpreferences erhalten. Letzte "alte" version hier: https://github.com/jedie/django-dbprefe ... ta_eval.py

Funktioniert allerdings nicht mehr mit Python 3, weil das compiler Modul weggefallen ist, siehe: https://docs.python.org/2/library/compiler.html

Also hab ich mir eine erweiterte Variante von ast.literal_eval() gebaut: https://github.com/jedie/django-dbprefe ... ta_eval.py

Aber wer viel mehr haben möchte, ist bei https://github.com/newville/asteval/ besser aufgehoben...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten