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.
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.