getRequestBody-Methode gibt keine Formular-Werte aus – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self?srt=yes getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 13:31:44 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803279?srt=yes#m1803279 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803279?srt=yes#m1803279 <p>Hallo zusammen,</p> <p>ich habe ein Problem mit meiner getBody()-Methode:</p> <pre><code class="block language-php"><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword return-type">array</span> <span class="token punctuation">{</span> <span class="token variable">$body</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'GET'</span> <span class="token punctuation">)</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$_POST</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$value</span> <span class="token punctuation">)</span> <span class="token variable">$body</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">filter_input</span><span class="token punctuation">(</span> <span class="token constant">INPUT_GET</span><span class="token punctuation">,</span> <span class="token variable">$key</span><span class="token punctuation">,</span> <span class="token constant">FILTER_SANITIZE_SPECIAL_CHARS</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'POST'</span> <span class="token punctuation">)</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$_POST</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$value</span> <span class="token punctuation">)</span> <span class="token variable">$body</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">filter_input</span><span class="token punctuation">(</span> <span class="token constant">INPUT_POST</span><span class="token punctuation">,</span> <span class="token variable">$key</span><span class="token punctuation">,</span> <span class="token constant">FILTER_SANITIZE_SPECIAL_CHARS</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$body</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Diese soll dazu dienen, http-Anfragen von bösartiger Eingabe zu befreien.</p> <p>Wenn ich jedoch in einer meiner Controller-Klassen diese getBody()-Methode abrufe (<code>$body = Controller::getBody();</code>), dann bekomme ich nur die Array-Keys geliefert, die entsprechenden Values bleiben leer.</p> <p>Ich weiß nicht, warum das so ist, denn bei <code>print_r( $_POST )</code> erscheinen sowohl die Keys als auch die Values. Außerdem funktioniert die getBody()-Methode bei einem anderen Formular, und zwar bei dem Formular zur Erstellung eines neuen Benutzerkontos. Ich habe keine Idee, woran es liegen könnte.<br> Stimmt was mit dem Input nicht?</p> <p>Grüße<br> Boris</p> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 14:16:55 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803280?srt=yes#m1803280 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803280?srt=yes#m1803280 <p>Hallo,</p> <blockquote> <pre><code class="block language-php"><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword return-type">array</span> <span class="token punctuation">{</span> <span class="token variable">$body</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'GET'</span> <span class="token punctuation">)</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$_POST</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$value</span> <span class="token punctuation">)</span> <span class="token variable">$body</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">filter_input</span><span class="token punctuation">(</span> <span class="token constant">INPUT_GET</span><span class="token punctuation">,</span> <span class="token variable">$key</span><span class="token punctuation">,</span> <span class="token constant">FILTER_SANITIZE_SPECIAL_CHARS</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>selbst ins Knie gesschossen? Wieso greifst du bei einem GET-Request auf die Keys und Values in $_POST zu? Das muss ja schiefgehen.</p> <p>By the way: Warum machst du immer doppelte Zeilenumbrüche im Code? Übersichtlicher wird's dadurch nicht.</p> <blockquote> <p>Diese soll dazu dienen, http-Anfragen von bösartiger Eingabe zu befreien.</p> </blockquote> <p>Ja, und die Absicht ist löblich, aber der Ansatz komplett falsch. Es gibt keine per se bösartigen Eingaben. Die kontextgerechte Aufbereitung (meist durch Maskierung oder Codierung) sollte da erfolgen, wo die Daten bei der Verarbeitung in einen anderen Kontext gelangen, wo bestimmte Zeichen plötzlich Schaden anrichten könnten. Einfach bei der Ankunft alles plattzubügeln, ist kontraproduktiv.</p> <blockquote> <p>Wenn ich jedoch in einer meiner Controller-Klassen diese getBody()-Methode abrufe (<code>$body = Controller::getBody();</code>), dann bekomme ich nur die Array-Keys geliefert, die entsprechenden Values bleiben leer.</p> </blockquote> <p>Bei welcher Request-Methode? GET oder POST? Weil ... für POST sieht's ja korrekt aus. Abgesehen von der wenig sinnvollen Keule filter_input(), deren Sinnhaftigkeit ich generell in Frage stelle.</p> <blockquote> <p>Ich weiß nicht, warum das so ist, denn bei <code>print_r( $_POST )</code> erscheinen sowohl die Keys als auch die Values.</p> </blockquote> <p>Also geht's um einen POST-Request?</p> <p>Einen schönen Tag noch<br>  Martin</p> <div class="signature">-- <br> Wer andern eine Bratwurst brät,<br> braucht wohl ein Bratwurstbratgerät. </div> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 14:37:53 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803284?srt=yes#m1803284 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803284?srt=yes#m1803284 <p>Hallo borisbaer,</p> <blockquote> <p>FILTER_SANITIZE_SPECIAL_CHARS - HTML-Kodierung von '"<>& und Zeichen mit ASCII-Wert kleiner als 32</p> </blockquote> <p>Da hat Martin recht, das ist als Eingabefilter nicht per se erforderlich. Für die Übergabe an die DB verwendest Du sowieso prepare um den Kontextwechsel zu kapseln. Und bei der späteren Ausgabe ins HTML verwendest Du htmlspecialchars, das übernimmt diesen Sanitäter-Job ohnehin.</p> <p>Diese Maskierung in der Eingabe ist sogar schädlich, denn auf einmal steht da ein &amp; wo eigentlich ein & stand, und damit sind ggf. String-Positionen nicht mehr das, was sie mal waren. Oder Vergleiche schlagen fehl, weil Du bspw. testen möchtest, ob jemand "Deathmatch & Co" eingegeben hat. Oder eine DB-Suche scheitert, weil jemand das Spiel "Bumm & Knall" gesucht hat. Du willst diese Zeichen nicht ohne Not maskiert in der DB stehen haben.</p> <p>Den $_POST im foreach hätte ich vermutlich auch erst nach einer Stunde gesehen. Mann mann mann…</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> Wahrscheinlich liegt es am Test Sun, 30 Oct 22 17:08:08 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803292?srt=yes#m1803292 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803292?srt=yes#m1803292 <p>Das hier tut es:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">class</span> <span class="token class-name-definition class-name">xTest</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'POST'</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$_POST</span> <span class="token keyword">as</span> <span class="token variable">$key</span> <span class="token operator">=></span> <span class="token variable">$value</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$body</span><span class="token punctuation">[</span><span class="token variable">$key</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">filter_var</span><span class="token punctuation">(</span> <span class="token variable">$value</span><span class="token punctuation">,</span> <span class="token constant">FILTER_SANITIZE_SPECIAL_CHARS</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token variable">$body</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'REQUEST_METHOD'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'POST'</span><span class="token punctuation">;</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'foo'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'<Foo>'</span><span class="token punctuation">;</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'bar'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'<Bar>'</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$_POST</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$body</span><span class="token operator">=</span><span class="token class-name static-context">xTest</span><span class="token operator">::</span><span class="token function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$body</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Testet Du mit echtem Request oder mit einer Simulation, in dem Du <code>$_POST</code> (wie von mir gezeigt) bzw. <code>$_GET</code> vor dem Test mit Daten befüllst?</p> <p>Womöglich (sic: womöglich) verwendet das von Dir gezeigte <code>filter_input()</code> nicht <code>$_POST</code> oder <code>$_GET</code> sondern <code>php://input</code> bzw. <code>HTTP_QUERY_STRING</code>.</p> <p>In dem Fall liegt es am Test, nicht am Skript... Mit der Simulation und <code>filter_input()</code> hatte ich nämlich auch kein Glück.</p> Da wäre noch was ... Sun, 30 Oct 22 17:35:15 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803295?srt=yes#m1803295 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803295?srt=yes#m1803295 <pre><code class="block">if ( $_SERVER['REQUEST_METHOD'] === 'GET' ) #... if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) </code></pre> <p>Ehem. Nur mal so am Rande. Wenn die REQUEST-METHODE === POST ist, dann wird es in $_GET auch Werte geben, die mit dem HTTP_QUERY_STRING reinkamen… Es gibt da kein <em>„Entweder GET oder POST“</em> sondern, <em>„wenn POST, dann <strong>AUCH</strong> POST“</em></p> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 15:35:23 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803285?srt=yes#m1803285 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803285?srt=yes#m1803285 <p>Hallo Martin,</p> <blockquote> <p>selbst ins Knie gesschossen? Wieso greifst du bei einem GET-Request auf die Keys und Values in $_POST zu? Das muss ja schiefgehen.</p> </blockquote> <p>ach, Mist, das sollte da gar nicht stehen. In meiner Verwirrung hatte ich das Ganze mal an der Stelle mit <code>$_GET</code> ausprobiert – nur, um zu sehen, was passieren würde. Aber im ursprünglichen Code stand <code>$_POST</code>. Geht leider trotzdem nicht.</p> <blockquote> <p>By the way: Warum machst du immer doppelte Zeilenumbrüche im Code? Übersichtlicher wird's dadurch nicht.</p> </blockquote> <p>Für mich an meinem Monitor ist das viel lesbarer. Ich kann den Code viel schneller visuell erfassen. Wahrscheinlich habe ich da einfach eine komische Wahrnehmung. ‍♂️</p> <blockquote> <p>Ja, und die Absicht ist löblich, aber der Ansatz komplett falsch. Es gibt keine per se bösartigen Eingaben. Die kontextgerechte Aufbereitung (meist durch Maskierung oder Codierung) sollte da erfolgen, wo die Daten bei der Verarbeitung in einen anderen Kontext gelangen, wo bestimmte Zeichen plötzlich Schaden anrichten könnten. Einfach bei der Ankunft alles plattzubügeln, ist kontraproduktiv.</p> </blockquote> <p>Hmm, ich habe diese Vorgehensweise aus einem Tutorial zum Schreiben eines MVC-Frameworks. Ich muss mich in Bezug auf SQL Injections weiterbilden.</p> <blockquote> <p>Bei welcher Request-Methode? GET oder POST? Weil ... für POST sieht's ja korrekt aus. Abgesehen von der wenig sinnvollen Keule filter_input(), deren Sinnhaftigkeit ich generell in Frage stelle.</p> </blockquote> <p>Für POST-Requests. Wäre es also sinnvoller z.B. so was hier zu machen:</p> <pre><code class="block language-php"><span class="token keyword">function</span> <span class="token function-definition function">input_filter</span><span class="token punctuation">(</span><span class="token variable">$data</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">trim</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">stripslashes</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$data</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Danke schon mal bis hierhin.</p> <p>Grüße<br> Boris</p> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 15:38:31 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803286?srt=yes#m1803286 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803286?srt=yes#m1803286 <p>Hallo Rolf,</p> <blockquote> <p>Da hat Martin recht, das ist als Eingabefilter nicht per se erforderlich. Für die Übergabe an die DB verwendest Du sowieso prepare um den Kontextwechsel zu kapseln. Und bei der späteren Ausgabe ins HTML verwendest Du htmlspecialchars, das übernimmt diesen Sanitäter-Job ohnehin.</p> </blockquote> <p>okay, stimmt eigentlich. Ist also eher unnötig.</p> <blockquote> <p>Diese Maskierung in der Eingabe ist sogar schädlich, denn auf einmal steht da ein &amp; wo eigentlich ein & stand, und damit sind ggf. String-Positionen nicht mehr das, was sie mal waren. Oder Vergleiche schlagen fehl, weil Du bspw. testen möchtest, ob jemand "Deathmatch & Co" eingegeben hat. Oder eine DB-Suche scheitert, weil jemand das Spiel "Bumm & Knall" gesucht hat. Du willst diese Zeichen nicht ohne Not maskiert in der DB stehen haben.</p> </blockquote> <p>Das ist in der Tat eine wichtige Überlegung. Daran hatte ich gar nicht gedacht. </p> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 16:02:59 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803289?srt=yes#m1803289 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803289?srt=yes#m1803289 <p>Hallo Boris,</p> <blockquote> <blockquote> <p>By the way: Warum machst du immer doppelte Zeilenumbrüche im Code? Übersichtlicher wird's dadurch nicht.</p> </blockquote> <p>Für mich an meinem Monitor ist das viel lesbarer. Ich kann den Code viel schneller visuell erfassen. Wahrscheinlich habe ich da einfach eine komische Wahrnehmung. ‍♂️</p> </blockquote> <p>okay, dann ticke ich da anders.</p> <blockquote> <p>Wäre es also sinnvoller z.B. so was hier zu machen:</p> <pre><code class="block language-php"><span class="token keyword">function</span> <span class="token function-definition function">input_filter</span><span class="token punctuation">(</span><span class="token variable">$data</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">trim</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">stripslashes</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$data</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Nein! Übernimm Eingangsdaten erstmal so, wie sie sind. Das passt schon. Erst beim Übertragen in andere Kontexte oder Formate (SQL, HTML, JSON, whatever) wird der Wert behandelt. Und zwar speziell auf den Zielkontext angepasst. Für SQL brauchst du eine andere Aufbereitung als für HTML, fürs Speichern in eine Textdatei vielleicht sogar überhaupt keine. Aber bitte keine Pauschalbehandlung unabhängig vom weiteren Verarbeitungsweg.</p> <p>Einen schönen Tag noch<br>  Martin</p> <div class="signature">-- <br> Wer andern eine Bratwurst brät,<br> braucht wohl ein Bratwurstbratgerät. </div> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 16:18:35 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803290?srt=yes#m1803290 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803290?srt=yes#m1803290 <blockquote> <blockquote> <p>Wäre es also sinnvoller z.B. so was hier zu machen:</p> <pre><code class="block language-php"><span class="token keyword">function</span> <span class="token function-definition function">input_filter</span><span class="token punctuation">(</span><span class="token variable">$data</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">trim</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">stripslashes</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">htmlspecialchars</span><span class="token punctuation">(</span> <span class="token variable">$data</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$data</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Nein! Übernimm Eingangsdaten erstmal so, wie sie sind. Das passt schon. Erst beim Übertragen in andere Kontexte oder Formate (SQL, HTML, JSON, whatever) wird der Wert behandelt. Und zwar speziell auf den Zielkontext angepasst. Für SQL brauchst du eine andere Aufbereitung als für HTML, fürs Speichern in eine Textdatei vielleicht sogar überhaupt keine. Aber bitte keine Pauschalbehandlung unabhängig vom weiteren Verarbeitungsweg.</p> </blockquote> <p>Okay, ich verstehe. Jeder Kontextwechsel braucht (oder eben auch nicht) ein bestimmte Aufbereitung der Daten. Aber POST-Werte, die man in eine Datenbank übertragen möchte, müssen doch stets irgendwie gefiltert werden, oder?</p> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 16:27:54 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803291?srt=yes#m1803291 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803291?srt=yes#m1803291 <p>Hi,</p> <blockquote> <blockquote> <p>Nein! Übernimm Eingangsdaten erstmal so, wie sie sind. Das passt schon. Erst beim Übertragen in andere Kontexte oder Formate (SQL, HTML, JSON, whatever) wird der Wert behandelt. Und zwar speziell auf den Zielkontext angepasst. Für SQL brauchst du eine andere Aufbereitung als für HTML, fürs Speichern in eine Textdatei vielleicht sogar überhaupt keine. Aber bitte keine Pauschalbehandlung unabhängig vom weiteren Verarbeitungsweg.</p> </blockquote> <p>Okay, ich verstehe. Jeder Kontextwechsel braucht (oder eben auch nicht) ein bestimmte Aufbereitung der Daten.</p> </blockquote> <p>ja, genau.</p> <blockquote> <p>Aber POST-Werte, die man in eine Datenbank übertragen möchte, müssen doch stets irgendwie gefiltert werden, oder?</p> </blockquote> <p>Ja, aber erst dann, und nicht vorher. Und dann mit <a href="https://www.php.net/manual/en/mysqli.real-escape-string.php" rel="nofollow noopener noreferrer">mysqli_real_escape_string()</a>. Andere Datenbanken wie z.B. sqlite brauchen möglicherweise wieder andere Maskierungen.</p> <p>Bei der Verwendung von Prepared Statements ist aber auch das AFAIK nicht mehr erforderlich (man möge mich bitte korrigieren, wenn das Unfug ist).</p> <p>Einen schönen Tag noch<br>  Martin</p> <div class="signature">-- <br> Wer andern eine Bratwurst brät,<br> braucht wohl ein Bratwurstbratgerät. </div> Die Sanitizer helfen nicht gegen SQL-Injektionen. Sun, 30 Oct 22 17:28:00 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803294?srt=yes#m1803294 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803294?srt=yes#m1803294 <blockquote> <p>Aber POST-Werte, die man in eine Datenbank übertragen möchte, müssen doch stets irgendwie gefiltert werden, oder?</p> </blockquote> <p>Meinetwegen. Aber nicht so. <strong>Die Sanitizer helfen nicht gegen SQL-Injektionen.</strong> <a href="https://forum.selfhtml.org/self/2022/oct/24/pdo-dynamische-read-und-write-funktion-schreiben/1803275#m1803275" rel="noopener noreferrer">Da nimm das Zeug, welches die Datenbank-Libary bietet</a>.</p> <p>Für die Ausgabe bereitest Du den Mist auf, wenn er ausgegeben wird (Dann nämlich kennst Du den Kontext.</p> getRequestBody-Methode gibt keine Formular-Werte aus Sun, 30 Oct 22 19:23:04 Z https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803297?srt=yes#m1803297 https://forum.selfhtml.org/self/2022/oct/30/getrequestbody-methode-gibt-keine-formular-werte-aus/1803297?srt=yes#m1803297 <p>Hallo borisbaer,</p> <blockquote> <p>Aber POST-Werte, die man in eine Datenbank übertragen möchte, müssen doch stets irgendwie gefiltert werden, oder?</p> </blockquote> <p>Warum sollten sie? Relevant ist nur, dass Du sie so wieder ausgibst, dass sie im Browser keinen Schaden anrichten.</p> <p>Filterungen sind eher fachlich bedingt. Ein trim() kann sinnvoll sein, das Entfernen von Nicht-ASCII-Zeichen auch (also Codes unter 32). Aber ansonsten Zeichen zu maskieren? Nö. Erst bei der Ausgabe.</p> <p>Wenn Datenbankfelder kein String sind, sondern ein int oder ein Date, ist es natürlich auch sinnvoll, die Werte dafür vorher zu prüfen, ob sie sinnvoll sind. Das ist Eingabeplausibilisierung. Schlägt die fehl, bekommt der User eine Fehlermeldung. Blind wegmaskieren darfst Du dann nicht.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div>