11.4. Zend_Filter_Input

11.4.1. Einführung

Zend_Filter_Input stellt Möglichkeiten für eine strukturierte Methode der Eingabefilterung bereit. Es bietet verschiedene Zwecke, da es die Bedürfnisse von drei unterschiedlichen Gruppen bedient:

  • Entwickler

    Obwohl das Filtern von Eingaben niemals so einfach sein kann, wie gar nichts zu tun, sollten Entwickler die Integrität ihrer Daten sicherstellen, ohne das dem Code unnötige Komplexität hinzugefügt werden muss.

  • Manager

    Manager jedweder Art, welche die Kontrolle über eine grosse Gruppe von Entwicklern behalten möchten, können eine strukturierte Vorgehensweise für das Filtern von Eingaben durchsetzen, indem der Zugriff auf unbearbeitete Eingabedaten beschränkt oder ausgeschlossen wird.

  • Prüfer

    Jene, welche den Code der Anwendung prüfen, müssen schnell und verlässlich erkennen können, wann und wo unbearbeitete Eingabedaten von Entwicklern verwendet werden. Die Charakteristika, die klaren Code fördern, unterstützen Prüfer ebenfalls durch die Bereitstellung von klarer Unterscheidung zwischen den unterschiedlichen Vorgehensweisen, um Eingaben zu filtern.

Es gibt eine Vielzahl von Vorgehensweisen für die Prüfung von Eingaben und es gibt auch eine Vielzahl von Ansätzen, die PHP Entwickler verwenden können. Whitelist Filtern, Blacklist Filtern, reguläre Ausdrücke, bedingte Anweisungen und native PHP Funktionen sind nur einige Beispiele des Potpourri für das Filtern von Eingaben. Zend_Filter_Input kombiniert alle diese Ansätze in einer einzigen API mit einheitlichem Verhalten und strikten Namenskonventionen. Alle diese Methoden befolgen eine einfach Regel - wenn die Daten gültig sind, werden sie zurückgegeben, andernfalls wird FALSE zurückgegeben. Extreme Einfachheit.

11.4.2. Theoretischer Ablauf

Um einen strukturierten Ansatz für das Filtern von Eingaben bereitzustellen, versucht Zend_Filter_Input standardmäßig den kontrollierten Zugriff auf die Eingaben zu erzwingen, in dem die Referenzt auf die Quelledaten auf null gesetzt werden.

Zend_Filter_Input vereint einige verschiedene Ansätze für das Filtern von Eingaben in einer einzigen API mit einem einheitlichem Verhalten und strikten Namenskonventionen (siehe Abschnitt 11.4.1, „Einführung“). Diese Charakteristika machen Zend_Filter_Input gleichwertig zu vorhandenen Lösungen, aber sie machen nichts, um diese weiter zu unterstützen, die einen strukturierteren oder rigideren Ansatz benötigen. Deshalb setzt Zend_Filter_Input einen kontrollierten Zugriff auf die Eingaben durch.

Zwei Syntax Arten werden unterstützt. In der standardmäßigen (strikten) Vorgehensweise wird ein einziges Argument an den Konstruktur übergeben - das Array, das gefiltert werden soll. Auf ungefiltere Daten kann nur über die getRaw() Methode zugegriffen werden:

<?php
// $_POST['email'] === 'webmaster@example.com'

// Filter the $_POST data array
require_once 'Zend/Filter/Input.php';
$filterPost = new Zend_Filter_Input($_POST);

// $_POST is now null
echo null === $_POST ? 'yes' : 'no'; // prints 'yes'

// Get the raw e-mail value
echo $filterPost->getRaw('email'); // prints 'webmaster@example.com'

Zend_Filter_Input setzt das übergebene Array ($_POST) auf NULL, so dass kein direkter Zugriff mehr möglich ist. (Die unbearbeiteten Daten sind nur noch über die getRaw() Methode verfügbar, was alles in allem viel einfacher zu kontrollieren und / oder zu vermeiden ist.)

Bei der optionalen (nicht strikten) Vorgehensweise wird FALSE als zweites Argument an den Konstruktor übergeben:

<?php
// $_POST['email'] === 'webmaster@example.com'

// Filter the $_POST data array
require_once 'Zend/Filter/Input.php';
$filterPost = new Zend_Filter_Input($_POST, false);

// $_POST remains not null
echo null === $_POST ? 'yes' : 'no'; // prints 'no'

// Get the raw e-mail value
echo $filterPost->getRaw('email'); // prints 'webmaster@example.com'

Die Verwendung des Filters ist genau gleich, außer dass Zend_Filter_Input das ursprüngliche Array ($_POST) nicht auf NULL setzt, so dass Entwickler es weiterhin direkt ansprechen können. Von dieser Vorgehensweise wird zu Gunsten der strikten Vorgehensweise abgeraten.

Zend_Filter_Input wurde primär für Arrays gestaltet. Viele Eingabequellen werden automatisch von den superglobalen PHP Arrays ($_GET, $_POST, $_COOKIE, usw.) abgedeckt und Arrays sind das allgemeine Konstrukt, dass für die Speicherung von Eingaben aus anderen Quellen verwendet wird. Wenn du einen skaleren Wert filtern möchtest, beachte Kapitel 11, Zend_Filter.