CGI Post-/Getdaten und überlauf...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Baue mir gerade mit socket einen POST Request zusammen in dem ich mal einfach ein haufen an Daten schicken kann, um zu sehen, wie der Server reagiert...

Gibt es dafür evtl. schon was fertiges?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ist dieser Thread im allgemeinen Forum kaputt/gehtwieder untergegangen oder hat dazu keiner was zu sagen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

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 ,-)
Benutzeravatar
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:

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()
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?!?!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dann macht die überprüfung doch evtl. Sinn?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gast: jens

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.
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

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.
Antworten