Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.
В качестве фильтрации можно понимать следующее:
- Фильтрация/нормализация входящих данных. К примеру, у вас есть страница с формой ввода данных банковской карты. Формат подразумевает использование пробелов, чёрточек, точек — из других символов допускаются только цифры. В этом случае будет неплохо нормализовать данные, избавившись от нежелательных символов.
- Валидация входящих данных. После нормализации можно осуществить валидацию данных в разрезе вашего бизнес контекста. Для начала неплохо было бы проверить ввёл ли пользователь правильное число символов, проверить принадлежность карты вендору и только после этого можно отправлять данные в онлайн-сервис.
Все эти действия можно осуществить при помощи компонента zend-filter.
Установка
Установить zend-filter можно через composer:
$ composer require zendframework/zend-filter
Единственной зависимостью данного компонента является zend-stdlib. Остальные пакеты устанавливать не обязательно, но желательно:
- zendframework/zend-servicemanager используется для компонента
FilterChain
чтобы осуществлять доступ к фильтрам по их сокращённым названиям. - zendframework/zend-crypt используется для шифрования и дешифрования фильтров.
- zendframework/zend-uri юзается фильтром
UriNormalize
. - zendframework/zend-i18n необходима для нескольких фильтров, которые направлены на интернациональные форматы данных.
В наших примерах будет использоваться класс FilterChain
, поэтому загрузим компонент zend-servicemanager:
$ composer require zendframework/zend-servicemanager
FilterInterface
Каждый фильтр имплементирует интерфейс Zend\Filter\FilterInterface
:
namespace Zend\Filter; interface FilterInterface { public function filter($value); }
zend-filter включает в себя целый ряд готовых фильтров:
- Преобразование строк, целых чисел и т.д., в булевы значения.
- Преобразование строковых значений в целые числа.
- Преобразование пустых значений в null.
- Преобразование значений в объекты
DateTime
. - Нормализация URI.
- Сравнений строк с белым/чёрным списком.
- Очистка от пробелов, символов перехода новую строку, удаление HTML тегов или сущностей.
- Работа с регистром строк.
- Удаление всех значений, кроме цифр.
- Замены по регулярным выражениям.
- Преобразование формата слов (из camel-case в underscores и обратно).
- Шифровка/дешифровка значений.
- Сжатие/распаковка значение.
Каждый из перечисленных фильтров можно использовать в отдельности. А что если вам нужно применить сразу несколько фильтров? В этом случае можно воспользоваться цепочками из фильтров!
Цепочка фильтров — FilterChain
Как бы мы это делали без zend-filter:
$value = $request->getParsedBody()['phone'] ?? ''; $value = trim($value); $value = preg_replace("/[^\n\r]/", '', $value); $value = preg_replace('/[^\d]/', '', $value);
С zend-filter и классом FilterChain
всё гораздо проще:
use Zend\Filter\FilterChain; $filter = new FilterChain(); // attachByName uses the class name, minus the namespace, and $filter->attachByName('StringTrim'); $filter->attachByName('StripNewlines'); $filter->attachByName('Digits'); $value = $filter->filter($request->getParsedBody()['phone'] ?? '');
Ещё один пример: предположим что у нас есть конфигурационный файл с ключами в формате snake_case_format
и мы бы хотели чтобы в коде данные ключи преобразовались в формат CamelCase
.
use Zend\Filter; $filter = new Filter\FilterChain(); // attach lets you provide the instance you wish to use; this will work // even without zend-servicemanager installed. $filter->attach(new Filter\StringTrim()); $filter->attach(new Filter\StripNewlines()); // because we may have \r characters $filter->attach(new Filter\Word\UnderscoreToCamelCase()); $configKeys = array_map([$filter, 'filter'], explode("\n", $fileContents));
Здорово, не правда ли?
На этом всё. Спасибо за внимание!
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://framework.zend.com/blog/2017-06-08-zend-filter.html
Перевел: Станислав Протасевич
Урок создан: 10 Июня 2017
Просмотров: 24169
Правила перепечатки
5 последних уроков рубрики "PHP"
-
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
-
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
-
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
-
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
-
Совет: активация отображения всех ошибок в PHP
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.