Фильтрация и очистка
Очистка пользовательского ввода — важная часть разработки программного обеспечения. Ненадлежащая очистка пользовательского ввода может привести к несанкционированному доступу к содержимому вашего приложения, в основном к данным пользователей, или даже к серверу, на котором размещено ваше приложение.
Компонент Phalcon\Filter предоставляет набор часто используемых фильтров и вспомогательных средств для очистки данных. Он предоставляет объектно-ориентированные оболочки вокруг расширения PHP filter.
Типы встроенных фильтров
Ниже приведены встроенные фильтры, предоставляемые этим компонентом:
| Имя | Описание |
|---|---|
| string | Удаляет теги и кодирует HTML-сущности, включая одинарные и двойные кавычки. |
| Удаляет все символы, кроме букв, цифр и !#$%&*+-/=?^_`{|}~@.[]. | |
| int | Удаляет все символы, кроме цифр, знаков плюс и минус. |
| float | Удаляет все символы, кроме цифр, точки, знаков плюс и минус. |
| alphanum | Удаляет все символы, кроме [a-zA-Z0-9] |
| striptags | Применяет функцию strip_tags |
| trim | Применяет функцию trim |
| lower | Применяет функцию strtolower |
| upper | Применяет функцию strtoupper |
Очистка данных
Очистка — это процесс удаления из значения определенных символов, которые не требуются или нежелательны для пользователя или приложения. Очистка ввода гарантирует сохранность целостности приложения.
use Phalcon\Filter;
$filter = new Filter();
// Returns "[email protected]"
$filter->sanitize("some(one)@exa\mple.com", "email");
// Returns "hello"
$filter->sanitize("hello<<", "string");
// Returns "100019"
$filter->sanitize("!100a019", "int");
// Returns "100019.01"
$filter->sanitize("!100a019.01a", "float");
Очистка из контроллеров
Вы можете получить доступ к объекту Phalcon\Filter из своих контроллеров при доступе к данным GET или POST (через объект запроса). Первый параметр — имя переменной для получения; второй — применяемый фильтр.
use Phalcon\Mvc\Controller;
class ProductsController extends Controller
{
public function indexAction()
{
}
public function saveAction()
{
// Sanitizing price from input
$price = $this->request->getPost("price", "double");
// Sanitizing email from input
$email = $this->request->getPost("customerEmail", "email");
}
}
Фильтрация параметров действия
Следующий пример показывает, как очистить параметры действия внутри действия контроллера:
use Phalcon\Mvc\Controller;
class ProductsController extends Controller
{
public function indexAction()
{
}
public function showAction($productId)
{
$productId = $this->filter->sanitize($productId, "int");
}
}
Фильтрация данных
Помимо очистки, Phalcon\Filter также предоставляет фильтрацию, удаляя или изменяя данные ввода в ожидаемый формат.
use Phalcon\Filter;
$filter = new Filter();
// Returns "Hello"
$filter->sanitize("<h1>Hello</h1>", "striptags");
// Returns "Hello"
$filter->sanitize(" Hello ", "trim");
Комбинирование фильтров
Вы также можете применить несколько фильтров к строке одновременно, передав массив идентификаторов фильтров в качестве второго параметра:
use Phalcon\Filter;
$filter = new Filter();
// Returns "Hello"
$filter->sanitize(
" <h1> Hello </h1> ",
[
"striptags",
"trim",
]
);
Создание собственных фильтров
Вы можете добавить свои собственные фильтры к Phalcon\Filter. Функция фильтра может быть анонимной функцией:
use Phalcon\Filter;
$filter = new Filter();
// Using an anonymous function
$filter->add(
"md5",
function ($value) {
return preg_replace("/[^0-9a-f]/", "", $value);
}
);
// Sanitize with the "md5" filter
$filtered = $filter->sanitize($possibleMd5, "md5");
Или, если вы предпочитаете, вы можете реализовать фильтр в классе:
use Phalcon\Filter;
class IPv4Filter
{
public function filter($value)
{
return filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
}
}
$filter = new Filter();
// Using an object
$filter->add(
"ipv4",
new IPv4Filter()
);
// Sanitize with the "ipv4" filter
$filteredIp = $filter->sanitize("127.0.0.1", "ipv4");
Сложная очистка и фильтрация
Сам PHP предоставляет отличное расширение для фильтров, которое вы можете использовать. Ознакомьтесь с его документацией: Фильтрация данных в документации PHP
Реализация собственного фильтра
Для создания собственной службы фильтрации, заменяющей предоставляемую Phalcon, необходимо реализовать интерфейс Phalcon\FilterInterface.
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/filter.html