expertenaustausch > comm.* > comm.infosystems.www.authoring.misc

Marcel Logen (21.03.2020, 22:43)
Gegeben sei ein Formular, das mit der POST-Methode arbeitet,
und ein input-Element:

<input type="text" [...] name="trallala" size="4" maxlength="2">

Damit kann man hier (im Browser) nur zwei Zeichen eingeben.

Allerdings wäre es IMHO unter Umgehung des Browsers möglich,
mit der POST-Methode beliebig viel Text an den Server zu sen-
den.

Kann man das (mit PHP?) unterbinden?

Man kann/muß natürlich $_POST['trallala'] per Regexp checken,
z. B. auf "^[0-9]{1,2}$", und dann weiterverarbeiten. Aber
dafür würde zunächst doch trotzdem die gesamte (evtl. über-
große) Datenmenge zum Server übertragen.

Gibt es dafür eine Lösung? Oder begrenzen die Server die
eingehende Datenmenge sowieso?

Marcel
Ulli Horlacher (21.03.2020, 23:50)
Marcel Logen <333200007110-0201> wrote:

> Man kann/muß natürlich $_POST['trallala'] per Regexp checken,
> z. B. auf "^[0-9]{1,2}$", und dann weiterverarbeiten. Aber
> dafür würde zunächst doch trotzdem die gesamte (evtl. über-
> große) Datenmenge zum Server übertragen.
> Gibt es dafür eine Lösung? Oder begrenzen die Server die
> eingehende Datenmenge sowieso?


Ich hatte vor 12 Jahren ein aehnliches Problem:
Ich wollte mehr als 2 GB POSTen.
Damals konnte kein mir bekannter Webserver das verarbeiten.
Die hatten alle einen signed int32 bug, den schon der Urvater aller
Webserver, der NCSA httpd, hatte. Alle anderen haben wohl davon
abgeschrieben ohne nachzudenken.

Ich hab dann etwas nachgeforscht: ein typischer Webserver nimmt erstmal
den gesammten http post request an und gibt ihn dann an das CGI Programm
weiter. Erst das limitiert die Groesse. Uebertragen sind die Daten dann
aber laengst.

Eventuell kann das ein moderner Webserver besser machen.

Ich hatte vor 12 Jahren dann aus Notwehr einen eigenen Webserver
geschrieben, der mit beliebig grossen POSTs zurecht kommt.
Auch 2 PB sind damit kein Problem mehr :-)
Stefan Froehlich (22.03.2020, 14:02)
On Sat, 21 Mar 2020 21:43:43 Marcel Logen wrote:
> Man kann/muß natürlich $_POST['trallala'] per Regexp checken, z.
> B. auf "^[0-9]{1,2}$", und dann weiterverarbeiten. Aber dafür
> würde zunächst doch trotzdem die gesamte (evtl. über- große)
> Datenmenge zum Server übertragen.


Ja; im Regelfall ist das aber kein größeres Problem; wenn jemand aus
Jux und Tollerei (oder auch in böser Absicht) Deinen Server mit
nicht weiterverarbeiteten Daten bewerfen möchte, dann könnte er das
ebenso auch über viele kleine Requests machen.

> Gibt es dafür eine Lösung? Oder begrenzen die Server die
> eingehende Datenmenge sowieso?


PHP bietet Dir in der Konfiguration ein paar Möglichkeiten zur
Begrenzung, Du kannst aber auch ganz basisnah den Webserver
entsprechend konfigurieren, beim Apache z.B. mit LimitRequestBody.

Servus,
Stefan
Marcel Mueller (22.03.2020, 19:33)
Am 21.03.20 um 21:43 schrieb Marcel Logen:
> Gegeben sei ein Formular, das mit der POST-Methode arbeitet,
> und ein input-Element:
> <input type="text" [...] name="trallala" size="4" maxlength="2">
> Damit kann man hier (im Browser) nur zwei Zeichen eingeben.
> Allerdings wäre es IMHO unter Umgehung des Browsers möglich,
> mit der POST-Methode beliebig viel Text an den Server zu sen-
> den.


Das geht immer.

> Kann man das (mit PHP?) unterbinden?


Da ist es schon zu spät. Das muss der Webserver machen.
In PHP kannst Du nur prüfen, ob die die Länge der Daten gefällt.

> Man kann/muß natürlich $_POST['trallala'] per Regexp checken,
> z. B. auf "^[0-9]{1,2}$", und dann weiterverarbeiten. Aber
> dafür würde zunächst doch trotzdem die gesamte (evtl. über-
> große) Datenmenge zum Server übertragen.


Exakt. Sowohl die Datenmenge als auch der ggf. belegte Speicher können
den Server beeinträchtigen. Wobei für DOS-Attacken die Sache mit dem
Speicher besser geeignet ist, denn das Netzwerk bekommt man mit einem
einzelnen Stream üblicherweise nicht platt, und für DDOS braucht man
keine großen Datenmengen pro Request.

> Gibt es dafür eine Lösung? Oder begrenzen die Server die
> eingehende Datenmenge sowieso?


Die meisten Server haben derlei Begrenzungen. Ausnahme sind
üblicherweise File-Uploads.

Marcel
Arno Welzel (24.03.2020, 01:23)
Marcel Logen:

> Gegeben sei ein Formular, das mit der POST-Methode arbeitet,
> und ein input-Element:
> <input type="text" [...] name="trallala" size="4" maxlength="2">
> Damit kann man hier (im Browser) nur zwei Zeichen eingeben.
> Allerdings wäre es IMHO unter Umgehung des Browsers möglich,
> mit der POST-Methode beliebig viel Text an den Server zu sen-
> den.
> Kann man das (mit PHP?) unterbinden?


Nicht nur *kann* sondern man *muss* es auch tun, gerade weil man per
HTTP beliebigen Müll schicken kann.

> Man kann/muß natürlich $_POST['trallala'] per Regexp checken,
> z. B. auf "^[0-9]{1,2}$", und dann weiterverarbeiten. Aber
> dafür würde zunächst doch trotzdem die gesamte (evtl. über-
> große) Datenmenge zum Server übertragen.


Bei Apache kann das begrenzen:

<http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody>

> Gibt es dafür eine Lösung? Oder begrenzen die Server die
> eingehende Datenmenge sowieso?


Auch PHP kann die Datenmenge begrenzen, die es verarbeitet.

Siehe post_max_size in
<https://www.php.net/manual/de/ini.core.php#ini.post-max-size>.

Und dann gäbe es auch noch Grenzen für Speicherbelegung, Ausführungszeit
usw..
Marcel Logen (26.03.2020, 17:16)
Marcel Logen in de.comm.infosystems.

>Gibt es dafür eine Lösung?


Dank an Euch alle für die erhellenden Antworten.

Ich werde mal mit phpinfo() nachsehen, was mein Provider da
standardmäßig so voreingestellt hat. Und was sich daran 'dre-
hen' läßt.

Gibt es eine ähnliche Funktion (wie phpinfo()) auch für den
Apache? Also in dem Sinne, daß man sich in einem directory
befindet und sich dann die dort (z. B. durch httpd.conf bis
hinunter zu den .htaccess-Dateien) aktuell eingestellten und
gültigen Werte anzeigen lassen kann?

Marcel
Arno Welzel (26.03.2020, 19:32)
Marcel Logen:

[...]
> Gibt es eine ähnliche Funktion (wie phpinfo()) auch für den
> Apache? Also in dem Sinne, daß man sich in einem directory
> befindet und sich dann die dort (z. B. durch httpd.conf bis
> hinunter zu den .htaccess-Dateien) aktuell eingestellten und
> gültigen Werte anzeigen lassen kann?


Theoretisch ja, praktisch wird das aber kein Serverbetreiber direkt
aufrufbar konfigurieren, weil man das sicher nicht öffentlich aufrufbar
haben will:

<https://httpd.apache.org/docs/2.4/mod/mod_info.html>