Newsletter

  • Immer informiert über die neusten Trends, Webseiten und Tutorials! Einfach hier für den monatlichen Newsletter anmelden.
  •  Eintragen
  •  Austragen

Login

Umfrage

  • Haben Sie Interesse an Softwaretipps für Webmaster?
  •  
  • ja
  • nein
  •  


Linktipps

Anzeige

 

www.finanzcheck.de
» Startseite » PHP und MySQL Tutorials

Mit der Methode array_walk(); kann man zum Beispiel gefährlichen Code aus den superglobalen Variablen POST und GET filtern.

array_walk

PHP verfügt durch array_walk eine recht interessante Funktion. In diesem Tutorial will ich zeigen, wie man array_walk nutzt um get- und post-Werte bereits zu beginn des PHP-Scripts "echo-kompatibel" zu machen. array_walk funktioniert ähnlich wie das bekannte foreach mit dem Unterschied das array_walk für jeden Array-Wert eine Funktion zur weiteren Verarbeitung des Array-Eintrags aufruft.
Mit den Arrays $_GET und $_POST ergibt sich folgender Funktions-Aufruf:

  1.  <?php
  2.  array_walk ($_GET, 'trimhtml');
  3.  array_walk ($_POST, 'trimhtml');
  4.  ?>


array_walk geht die Werte von $_GET / $_POST durch und ruft für jeden Wert die Funktion trimHTML() auf. An dieser wird als erster Parameter der Value, als zweiter (optional) der Wert-Key übergeben.

Unsere trimHTML:

  1.  <?php
  2.  function trimhtml (&$value, $key) {
  3.  $value = trim(htmlspecialchars($value, ENT_QUOTES));
  4.  } 
  5.  ?>


Hier werden zwei Methon angewendet: htmlspecialchars() wandelt alle Sonderzeichen (<,>,",',&) in HTMLs um. trim() "kehrt" Leerzeichen und Breaklines von beiden Enden des Strings.

Ergebnis:

Query-Value vor dem Trimmen: <script>alert('haligali')</script>
Nach dem Trimmen: &lt;script&gt;alert(&#039;haligali&#039;)&lt;/script&gt;

Statt htmlspecialchars() lässt sich htmlentities() einsetzen. Es wandelt alle Sonderzeichen (also Umlaute) in HTMLs. strip_tags() dagegen entfernt HTML-Tags, bzw. alles zwischen < und > aus dem String.

Mehrdimensionale Arrays

Für das Trimmen verschachtelter Arrays benutzen wir array_walk_recursive. Mehrdimensionale Arrays machen Sinn, wenn viele Werte verarbeitet werden. Zum Beispiel bei diesem Aufruf: showEntries($_POST['text']). showEntries() erhält ein Array, das nur Sub-Values des text-indexes enthält.
Mehrdimensionale Variablen werden in einem HTML-Formular deklariert durch:

  1.  <input type="hidden" name="set[url]" value="http://host.de">
  2.  <input type="text" name="text[name]" value="">
  3.  <input type="text" name="text[email]" value="">
  4.  ...


An den Wert von url kommen wir durch $_POST['set']['url'] ran.
Bei der Get-Übergabe von Arrays haben wir folgende Query: ?a=val&b[c1]=wert1&b[c2]=wert2

trimHTML() als Debugger

Wir können die kleine trimHTML Funktion zu einem einfachen Debugger umfunktionieren: Ein echo zeigt alle übergebenen Parameter, die array_walk durchläuft, an.

Der ganze Code:

  1.  <?php
  2.  array_walk_recursive ($_GET, 'trimhtml');
  3.  array_walk_recursive ($_POST, 'trimhtml');
  4.  function trimhtml (&$value, $key) {
  5.  $value = trim(htmlspecialchars($value, ENT_QUOTES));
  6.  }           
  7.  ?>


Fragen? Probleme? Keine Antworten? Hilfe finden Sie im Webmaster Forum!

Diese Artikel könnten Sie auch interessieren:
Reguläre Ausdrücke
Alternative Syntax für Kontroll-Strukturen
Unterschiedlicher Footer auf verschiedenen Seiten
String nach Wortende trennen
Was ist PHP?


 
Anzeige