Hallo
Ich habe ein Sicherheitsproblem:
Ich gebe eine anfrage an meinen Server und der gibt dann eine List zurück die ich mit "eval" wieder lesbar mache. Das ganze passiert nämlich mit urllib2 und da kommt ja nur Text durch.
An der Methode mit urllib kann ich nicht machen, muss so bleiben, nur eval muss weg.
Wie würdet ihr das machen?
Hier mal ein Beispiel:
[{"projekt" : "test", "Version" : 1.0}, {"projekt" : "test1", "Version" : 1.1}]
XML währe sicher was, aber ich kenne mich da noch gar nicht aus, ein Beispiel währe gut, wenn xml das richtige ist.
Gruß
Andyh
Liste oder Dict sicher durchs Internet
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
JSON empfiehlt sich hier, XML lohnt sich imho nur, wenn man komplexere Abfrage über XPath durchführen oder an eine XML-Umgebung gebunden ist.
Hallo
DANKEE!!!
Da mir Json nicht zur Verfügung steht habe ich marshal genommen.
Jetzt ist das endlich richtig gemacht, man kann ja kein dict in eine string umwandeln und dann das ganze durch das web schicken um am Schluss wieder mit eval das ganze ein einzulesen.
Gruß
Andyh
DANKEE!!!
Da mir Json nicht zur Verfügung steht habe ich marshal genommen.
Jetzt ist das endlich richtig gemacht, man kann ja kein dict in eine string umwandeln und dann das ganze durch das web schicken um am Schluss wieder mit eval das ganze ein einzulesen.
Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Hallo
oha, naja eine Stufe besser ist es ja mal, die Dateien bereite ich auf dem Server mit marshal auf, dann müsste das schon gut gehen?
Ich denke pickle oder cpickle ist da auch nicht besser.
Gibt es denn sonst noch alternativen?
Gruß
Andyh
oha, naja eine Stufe besser ist es ja mal, die Dateien bereite ich auf dem Server mit marshal auf, dann müsste das schon gut gehen?
Ich denke pickle oder cpickle ist da auch nicht besser.
Gibt es denn sonst noch alternativen?
Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Na eben JSON.
Ab Python 2.6: http://docs.python.org/library/json.html
Ab Python 2.4: http://pypi.python.org/pypi/simplejson
Ab Python 2.6: http://docs.python.org/library/json.html
Ab Python 2.4: http://pypi.python.org/pypi/simplejson
marshal ist nicht besser als eval! Weder marshal noch pickle sind geeignete Formate für den Datentransfer über unsichere Kanäle, die Warnungen in der Dokumentation sind nicht umsonst da, und du solltest diese Warnungen auch ernst nehmen.
Alternativen sind XML, JSON und YAML.
Alternativen sind XML, JSON und YAML.
Wenn man schon unbedingt Python Code für die Daten verwendet dann sollte man den mit ast.literal_eval ausführen.
Das "Sicherheitsproblem" lässt sich doch auch durch Vertrauen lösen, oder? In diesem Fall könnte eine SSL-Verbindung benutzen, bei der man die Zertifikate prüft, um so nur mit vertrauenswürdigen Clients bzw. Servern zu reden.
Eine andere Idee wäre, wenn Client und Server ein "shared secret" kennen (also z.B. eine AES-128-Schlüssel), die Nachrichten mit einem HMAC zu versehen. Dann kann sie zwar jeder lesen, aber nicht ändern, ohne dass es auffällt.
Stefan
Eine andere Idee wäre, wenn Client und Server ein "shared secret" kennen (also z.B. eine AES-128-Schlüssel), die Nachrichten mit einem HMAC zu versehen. Dann kann sie zwar jeder lesen, aber nicht ändern, ohne dass es auffällt.
Stefan
Hallo
@DasIch:
ast.literal_eval hört sich doch gut an, aber auch wieder nicht. Ich muss mit Python 2.5 auskommen mit der stdlib
@sam
Das Sicherheitsproblem wie du es beschreibst besteht dahingehend nicht weil das Programm nur mit meinem Server redet. Ich habe einfach nur angst eine Schnittstelle ins Internet einzubauen die Python-Code ausführt.
Gruß
Andyh
@DasIch:
ast.literal_eval hört sich doch gut an, aber auch wieder nicht. Ich muss mit Python 2.5 auskommen mit der stdlib
@sam
Das Sicherheitsproblem wie du es beschreibst besteht dahingehend nicht weil das Programm nur mit meinem Server redet. Ich habe einfach nur angst eine Schnittstelle ins Internet einzubauen die Python-Code ausführt.
Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
und genau dieser Angst kannst du mit Vertrauen begegnen. Das halte ich für den prinzipiell besten Weg. Denn auch JSON oder XML können Daten enthalten, die das verarbeitende Programm dermaßen aus dem Tritt bringen, dass es Schaden anrichtet. Vertrauen schließt Änderungen durch unbekannte Dritte aus.Andyh hat geschrieben:Das Sicherheitsproblem wie du es beschreibst besteht dahingehend nicht weil das Programm nur mit meinem Server redet. Ich habe einfach nur angst eine Schnittstelle ins Internet einzubauen die Python-Code ausführt.
Stefan
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Andyh, hör doch endlich hin: JSON! Wo ist denn das Problem?!
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
:D
Hey, das glaube ich nicht ;-)
Und wenn doch, schreib dir halt nen JSON-Parser, das ist ja nicht wirklich schwer (es gibt ja nur Listen, Dicts, Strings, Floats, Ints).
Gruß
Hey, das glaube ich nicht ;-)
Und wenn doch, schreib dir halt nen JSON-Parser, das ist ja nicht wirklich schwer (es gibt ja nur Listen, Dicts, Strings, Floats, Ints).
Gruß
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wobei das das ohne Begründung ja ziemlicher Quatsch ist. Warum nur auf stdlib beschränken?cofi hat geschrieben:Da ... mensch Dauerbaustelle les doch endlichAndyh hat geschrieben:Ich muss mit Python 2.5 auskommen mit der stdlibSCNR
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ein denkbarer Fall wäre, dass man keine Pythonmodule nachinstallieren kann (z.B. weil man keine Admin-Rechte bekommt). Oder man will in jedem Fall Abhängigkeiten zu Drittpaketen vermeiden. Bei letzterem stellt sich aber natürlich die Frage, wie lange diese Schiene gut geht (offenbar jetzt ja nicht mehr so wirklich).
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Pythonmodule kann man aber auch ohne Installation nutzen...
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nunja eventuell ist es eine Aufgabenstellung - die koennen schliesslich besonders bloed ausfallenLeonidas hat geschrieben:Wobei das das ohne Begründung ja ziemlicher Quatsch ist. Warum nur auf stdlib beschränken?

Mehr als die Alternativen koennen wir ja auch nicht anbieten, wenn er nicht will, dann will er nicht.
Gerade aus dem Sack voll JSON-Libs ließe sich bestimmt eine passende finden, die man einfach mit dem Programm ausliefert. Man muß ja nicht immer alles neu erfinden.
Zur Sicherheit:
@Andyh
Je nach dem, wie wichtig der Sicherheitsaspekt für Deine Anwendung ist, solltest Du weitere Maßnahmen ergreifen (sma hat schon darauf hingewiesen). Denn egal ob JSON, pickle oder was auch immer Du nutzt, solange ein unsicheres Transportmedium dazwischen hängt, kannst Du der Quelle nicht mehr vertrauen. Auch wenn die Quelle primär vertrauenswürdig ist, könnte ein man-in-the-middle das Ganze manipuliert an Server/Client weitergeben.
Und mit Deinem marshal-Ansatz lieferst Du die Steilvorlage für Code-Injections.
Zur Sicherheit:
@Andyh
Je nach dem, wie wichtig der Sicherheitsaspekt für Deine Anwendung ist, solltest Du weitere Maßnahmen ergreifen (sma hat schon darauf hingewiesen). Denn egal ob JSON, pickle oder was auch immer Du nutzt, solange ein unsicheres Transportmedium dazwischen hängt, kannst Du der Quelle nicht mehr vertrauen. Auch wenn die Quelle primär vertrauenswürdig ist, könnte ein man-in-the-middle das Ganze manipuliert an Server/Client weitergeben.
Und mit Deinem marshal-Ansatz lieferst Du die Steilvorlage für Code-Injections.