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.
read mit Timeout
- Xin
- nur zu Besuch hier
- Beiträge: 8858
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
read mit Timeout
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 236
- Registriert: Do Feb 10, 2011 6:31 pm
Re: read mit Timeout
Code: Alles auswählen
read -t TIMEOUT
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: read mit Timeout
Pack es in nen Thread und wenn der sich nicht innerhalb von 10s beendet hat, fliegt er raus.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8858
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: read mit Timeout
nouseforname hat geschrieben:Code: Alles auswählen
read -t TIMEOUT
Ich meinte die C-Routine. ^^
Code: Alles auswählen
man 2 read
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.cloidnerux hat geschrieben:Pack es in nen Thread und wenn der sich nicht innerhalb von 10s beendet hat, fliegt er raus.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 236
- Registriert: Do Feb 10, 2011 6:31 pm
Re: read mit Timeout
Xin hat geschrieben: Ich meinte die C-Routine. ^^Du sagtest Linux und read(), also pasts esCode: Alles auswählen
man 2 read
Re: read mit Timeout
Du kannst mit select() vorher abfragen, ob Zeichen zur Verfügung stehen (bzw. ob ein read() blockieren würde).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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.