Ich frage mich gerade ob ich in PyLucid anfragen sollte, wie groß die geschickten POST/GET Daten sind... Von wegen überlauf und so...
Gibt es da irgendwelche Sicherheitsbedenken???
Irgendwo hab ich den Tipp gefunden, das man os.environ["CONTENT_LENGTH"] checken sollte... Aber wiegroß dürfen die Daten werden?
CGI Post-/Getdaten und überlauf...
Hmm...
An welcher Stelle hast du denn Angst vor einem Überlauf?
Ich meine, du codest ja nicht in C ,-)
Solange der Python-Interpreter nicht buggy ist, können zu viele Daten IMHO höchstens bewirken, dass der Prozess der die request behandelt vom kernel abgeschossen werden muss, weil er den ganzen RAM verbaucht, dann kann halt derjenige, der meint dir so viele Dtaen schicken zu müssen nicht weiterarbeiten.
Hat er dann ja auch nicht verdient ,-)
An welcher Stelle hast du denn Angst vor einem Überlauf?
Ich meine, du codest ja nicht in C ,-)
Solange der Python-Interpreter nicht buggy ist, können zu viele Daten IMHO höchstens bewirken, dass der Prozess der die request behandelt vom kernel abgeschossen werden muss, weil er den ganzen RAM verbaucht, dann kann halt derjenige, der meint dir so viele Dtaen schicken zu müssen nicht weiterarbeiten.
Hat er dann ja auch nicht verdient ,-)
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Da hast du wahrscheinlich recht...
Naja, ich hab irgendwo davon gelesen, das es sicherheitstechnisch besser wäre, wenn man die Länge überprüft. Nun wollte ich mal eine zweite Meinung einholen
Generell ist es allerdings kein großer Aufwand das mal zu testen:
Allerdings wird CONTENT_LENGTH auch vom Client aus gesetzt... Somit ist es fraglich was die Überprüfung taugt, wenn sie vom Client "manipuliert" werden kann...
Vielleicht überprüft Apache das ganze ja auch, bevor er das CGI startet?!?!
Naja, ich hab irgendwo davon gelesen, das es sicherheitstechnisch besser wäre, wenn man die Länge überprüft. Nun wollte ich mal eine zweite Meinung einholen
Generell ist es allerdings kein großer Aufwand das mal zu testen:
Code: Alles auswählen
if os.environ.has_key("CONTENT_LENGTH"):
# Ist nur vorhanden, wenn der Client POST Daten schickt.
length = int(os.environ["CONTENT_LENGTH"])
if length>65534:
print "Content-type: text/html; charset=utf-8\r\n"
print "<h1>Error: Too much POST/GET content!</h1>"
print "Content length = %s" % length
sys.exit()
Vielleicht überprüft Apache das ganze ja auch, bevor er das CGI startet?!?!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Post-Daten werden über eine Art Stdin-Verbindung an den Prozess gefüttert - ohne Zwischenspeicherung, soweit ich weiß. Also kann Apache das auch nicht prüfen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hmm, ich denke nicht.
Du hast die Daten ja schon und wenn du prüfen kannst, wie groß sie sind macht das ja keinen Sinn mehr, da du ja schon weißt, dass der Interpretzer damit läuft, denn sonst könntest du die Daten ja wohl kaum prüfen, nicht wahr?
Allerdings kenne ich mich da nicht so sonderlich gut aus, am besten fragst du mal in einer passenden Mailingliste (Apache oder Perl oder so). Ich würde allerdings es nicht prüfen, außer ich will die Daten speichern, zum Beispiel nur einen Upload von 10kb großen Bildern erlauben oder so.
Du hast die Daten ja schon und wenn du prüfen kannst, wie groß sie sind macht das ja keinen Sinn mehr, da du ja schon weißt, dass der Interpretzer damit läuft, denn sonst könntest du die Daten ja wohl kaum prüfen, nicht wahr?
Allerdings kenne ich mich da nicht so sonderlich gut aus, am besten fragst du mal in einer passenden Mailingliste (Apache oder Perl oder so). Ich würde allerdings es nicht prüfen, außer ich will die Daten speichern, zum Beispiel nur einen Upload von 10kb großen Bildern erlauben oder so.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Das stimmt nicht so ganz. Denn du kannst die os.environ["CONTENT_LENGTH"] erst checken und dann erst auf die CGI-Daten mit cgi.FieldStorage() zugreifen...
Wenn man der CONTENT_LENGTH aber nicht vertraut, hast du schon recht.
Wenn man der CONTENT_LENGTH aber nicht vertraut, hast du schon recht.
Was vielleicht noch Sinn macht ist die tatsächliche Länge der Daten mit dem CONTENT_LENGTH-Wert zu vergleichen und den User zu strafen, falls die nicht stimmen sollten, aber wie gesagt, so lange du dich auf den CONTENT_LENGTH-Wert nicht verlässt, ists eh wurscht.