Seite 1 von 1

read mit Timeout

Verfasst: Di Apr 19, 2011 9:42 am
von Xin
U.a. für das proggen.org CMS schreibe ich einen Webserver. Der funktioniert auch schon und liefert einer Responderklasse brav seine HTTP-Parameter und Variablen, die per POST übertragen werden.
Also Formulare übertragen klappt inzwischen. :-)

Um die Anfrage aus dem Stream zu lesen, verwende ich die Linux-Funktion read().
Mein Problem ist, dass eine Anfrage an den Webserver dazu führt, dass dieser die Anfrage lesen muss und die read() Funktion solange wartet, bis das erwartete Zeichen kommt.

Wenn ein Angreifer nun eine halbe Anfrage schickt und mich dann sitzen lässt, wartet der Server...
Wenn das ein Bot-Netz macht, macht die Kiste die Grätsche.
Ich muss also in die Lage versetzt werden, das Warten abzubrechen. Dafür brauche ich ein Timeout, so dass ich festlege "Wer nach 10 Sekunden seine Anfrage nicht vollständig geschickt hat, hat Pech gehabt."

Kennt jemand spontan ein Read mit Timeout? Ich meine sowas schonmal gesehen zu haben, aber Google wirft mich mit anderen Sprachen zu.

Re: read mit Timeout

Verfasst: Di Apr 19, 2011 10:46 am
von nouseforname

Code: Alles auswählen

read -t TIMEOUT

Re: read mit Timeout

Verfasst: Di Apr 19, 2011 10:49 am
von cloidnerux
Pack es in nen Thread und wenn der sich nicht innerhalb von 10s beendet hat, fliegt er raus.

Re: read mit Timeout

Verfasst: Di Apr 19, 2011 10:50 am
von Xin
nouseforname hat geschrieben:

Code: Alles auswählen

read -t TIMEOUT
:-)

Ich meinte die C-Routine. ^^

Code: Alles auswählen

man 2 read
Hier brauche ich eine Variante mit Timeout. Im Notfall muss ich den 'read'-Befehl auseinandernehmen und gucken, was der tut ^^

cloidnerux hat geschrieben:Pack es in nen Thread und wenn der sich nicht innerhalb von 10s beendet hat, fliegt er raus.
Das ist bisher auch meine Überlegung, da ich sowieso Threads verwenden will. Derzeit nutze ich fork(), was aber vielleicht aufwändiger als notwendig ist. Dann muss ich allerdings eine Verwaltung von abzuschießenden Threads aufmachen, was ich natürlich gerne verhindern würde.

Re: read mit Timeout

Verfasst: Di Apr 19, 2011 12:41 pm
von nouseforname
Xin hat geschrieben: Ich meinte die C-Routine. ^^

Code: Alles auswählen

man 2 read
Du sagtest Linux und read(), also pasts es :P

Re: read mit Timeout

Verfasst: Mi Jan 16, 2013 7:40 pm
von mfro
Xin hat geschrieben: Um die Anfrage aus dem Stream zu lesen, verwende ich die Linux-Funktion read().
Mein Problem ist, dass eine Anfrage an den Webserver dazu führt, dass dieser die Anfrage lesen muss und die read() Funktion solange wartet, bis das erwartete Zeichen kommt.
Du kannst mit select() vorher abfragen, ob Zeichen zur Verfügung stehen (bzw. ob ein read() blockieren würde).