Spec-Zone.ru › Phalcon 3

Фильтрация и очистка

Очистка пользовательского ввода — важная часть разработки программного обеспечения. Ненадлежащая очистка пользовательского ввода может привести к несанкционированному доступу к содержимому вашего приложения, в основном к данным пользователей, или даже к серверу, на котором размещено ваше приложение.

../_images/sql.png

Полное изображение (из xkcd)

Компонент Phalcon\Filter предоставляет набор часто используемых фильтров и вспомогательных средств для очистки данных. Он предоставляет объектно-ориентированные оболочки вокруг расширения PHP filter.

Типы встроенных фильтров

Ниже приведены встроенные фильтры, предоставляемые этим компонентом:

Имя Описание
string Удаляет теги и кодирует HTML-сущности, включая одинарные и двойные кавычки.
email Удаляет все символы, кроме букв, цифр и !#$%&*+-/=?^_`{|}~@.[].
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API