Seite 1 von 1

CGI Post-/Getdaten und überlauf...

Verfasst: Donnerstag 29. September 2005, 11:32
von jens
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?

Verfasst: Donnerstag 29. September 2005, 12:20
von jens
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?

Verfasst: Freitag 30. September 2005, 17:25
von jens
Ist dieser Thread im allgemeinen Forum kaputt/gehtwieder untergegangen oder hat dazu keiner was zu sagen?

Verfasst: Freitag 30. September 2005, 17:45
von henning
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 ,-)

Verfasst: Freitag 30. September 2005, 17:51
von jens
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?!?!

Verfasst: Freitag 30. September 2005, 18:00
von Leonidas
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.

Verfasst: Freitag 30. September 2005, 18:46
von jens
Dann macht die überprüfung doch evtl. Sinn?

Verfasst: Freitag 30. September 2005, 18:55
von Leonidas
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.

Verfasst: Freitag 30. September 2005, 19:42
von 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.

Verfasst: Samstag 1. Oktober 2005, 07:46
von henning
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.