Zend_Filter_Input
предоставляет средства,
способствующие сруктурированному подходу к фильтрации
входных данных. Он преслеует несколько целей, поскольку должен удовлетворять потребности трех различных групп людей:
Разработчики
Хотя фильтрация входных данных всегда требует некоторых усилий, разработчикам нужна уверенность в целостности их данных без добавления лишней сложности в их код.
Менеджеры
Менеджеры всех типов, которым необходим постоянный контроль за большой группой разрабочиков, могут принудить разработчиков к системному подходу к фильтрации входных данных посредством ограничения или исключения доступа к необработанным входным данным.
Аудиторы
Тем, кто проверяет код приложения, нужно быстрое и достоверное определение того, где и когда разрабочик использует необработанные входные данные. Свойства, которые способствуют ясности кода, также оказывают помощь аудиторам тем, что обеспечивают четкую различимость разных подходов к фильтрации входных данных.
Есть множество подходов к фильтрации входных данных и средств, применяемых разработчиками PHP. Фильтрация по "белому списку", по "черному списку", регулярные выражения, условные операторы, встроенные функции PHP - только несколько примеров из всего разнообразия подходов к фильтрации входных данных.
Для того, чтобы обеспечить структурный подход к фильтрации входных
данных, Zend_Filter_Input
пытается усилить контроль за доступом к входным данным поредством установки ссылки на массив исходных данных в null
.
В подходе, принятом по умолчанию, (строгом) конструктору передается
единственный аргумент - массив данных для фильтрации.
Нефильтрованные данные могут быть получены только через метод getRaw()
.
<?php // $_POST['email'] === 'webmaster@example.com' // Фильтрация массива данных $_POST require_once 'Zend/Filter/Input.php'; $filterPost = new Zend_Filter_Input($_POST); // $_POST теперь равен null echo null === $_POST ? 'yes' : 'no'; // prints 'yes' // Получение необработанного значения e-mail echo $filterPost->getRaw('email'); // prints 'webmaster@example.com'
Zend_Filter_Input
устанавливает переданный массив
($_POST
) в null
, поэтому
прямой доступ будет невозможным. (Необработанные данные будут
доступны только через метод getRaw()
, через
который легче контролировать доступ к необработанным данным и/или
полностью исключить его).
В опциональном (нестрогом) подходе конструктору в качестве второго
аргумента передается false
.
<?php // $_POST['email'] === 'webmaster@example.com' // Фильтрация массива данных $_POST require_once 'Zend/Filter/Input.php'; $filterPost = new Zend_Filter_Input($_POST, false); // $_POST не равен null echo null === $_POST ? 'yes' : 'no'; // выводит 'no' // Получение необработанного значение e-mail echo $filterPost->getRaw('email'); // prints 'webmaster@example.com'
Использование фильтра будет в точности таким же, как в случае
строгого подхода, но Zend_Filter_Input
не
устанавливает исходный массив ($_POST
) в
null
, и таким образом, разработчики смогут
по-прежнему обращаться к нему напрямую. Этот подход не
рекомендуется, вместо него рекомендуется использовать строгий
подход.
Zend_Filter_Input
спроектирован для использования
массивов данных. Многие источники входных данных уже охвачены
суперглобальными массивами PHP ($_GET
,
$_POST
, $_COOKIE
и т.д.),
массивы являются конструкцией, наиболее часто используемой для
хранения входных данных из других источников. Если вам нужно
фильтровать скалярные значения, см. Глава 11, Zend_Filter.