@Leonidas
Ich sag ja, wer wirklich will, der kann auch
@DasIch
Was mich generell an diesem Client<->Server Modell irgendwie stört, ist die Tatsache dass alles hin und hergeschoben wird. Angenommen ich möchte über den Inhalt einer Datei iterieren, dann lade ich die Datei schrittweise hoch zum Server, was ich nicht sonderlich toll finde.
Code per Netzwerk übertragen
Ich verstehe nicht, wie ihr auf RPC kommt? Er möchte doch code, der auf einem Server liegt, clientseitig ausführen. Bei RPC würde doch der Code auf dem Server ausgeführt werden, oder?
Sicherheitstechnisch ist das natürlich immer ein Problem, wenn man ausführbare Sachen von irgendwo runterlädt, z.B. schon bei Auto-Update, was sie selbst beim neuen ePerso vergeigt haben: http://janschejbal.wordpress.com/2010/1 ... utoupdate/
Wenn es also sicher sein soll:
1. Code wird serverseitig signiert
2. Code herunterladen
3. Zertifikat Prüfen (Dies muss geschehen, bevor auch nur irgendwas damit getan wird, denn selbst beim Entpacken kann mann sich ärger einhandeln)
4. Code ausführen.
Die eigentliche Frage bezog sich ja nur auf Punkt 4. Wenn es Python-Code ist, gibt es da so weit ich sehe nur 2 Möglichkeiten:
a) Abspeichern und Importieren
b) exec()
Da a) ja explizit nicht gewünscht war, bleibt ja nur noch b) übrig.
P.S.: Zu exec() wird ja immer gemahnt, dass es total unsicher sei. Kommt natürlich darauf an, was man machen will. Wenn man z.B. ein Projekt hat, wo die andere Seite (nach authentifizierung) alles machen können soll, was sie will (inklusive Festplatte löschen), dann ist exec() vollkommen OK.
Sicherheitstechnisch ist das natürlich immer ein Problem, wenn man ausführbare Sachen von irgendwo runterlädt, z.B. schon bei Auto-Update, was sie selbst beim neuen ePerso vergeigt haben: http://janschejbal.wordpress.com/2010/1 ... utoupdate/
Wenn es also sicher sein soll:
1. Code wird serverseitig signiert
2. Code herunterladen
3. Zertifikat Prüfen (Dies muss geschehen, bevor auch nur irgendwas damit getan wird, denn selbst beim Entpacken kann mann sich ärger einhandeln)
4. Code ausführen.
Die eigentliche Frage bezog sich ja nur auf Punkt 4. Wenn es Python-Code ist, gibt es da so weit ich sehe nur 2 Möglichkeiten:
a) Abspeichern und Importieren
b) exec()
Da a) ja explizit nicht gewünscht war, bleibt ja nur noch b) übrig.
P.S.: Zu exec() wird ja immer gemahnt, dass es total unsicher sei. Kommt natürlich darauf an, was man machen will. Wenn man z.B. ein Projekt hat, wo die andere Seite (nach authentifizierung) alles machen können soll, was sie will (inklusive Festplatte löschen), dann ist exec() vollkommen OK.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
In diesem Zusammenhang könnte ja auch dieser Thread interessant sein.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das kann man auch eleganter Lösen, da CPython es erlaubt in die Import-Interna einzugreifen und dort eigenen Code auszuführen der etwa Module runterlädt, Signaturen prüft etc.Noah hat geschrieben:a) Abspeichern und Importieren
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice