Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Рецепт защиты звучит просто: данные нужно фильтровать и экранировать.

PHP фильтрация данных — дело не простое. К примеру, чтобы экранировать HTML вам потребуется вызвать функцию htmlspecialchars(), с флагами ENT_QUOTES | ENT_SUBSTITUTE, а также указать кодировку символов:

htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8')

Эффективное экранирование HTML атрибутов, CSS и JavaScript кода требует намного большей скрупулёзности. Следует брать во внимание преобразование символов из одной кодировки в другую, регулярные выражения и многое другое. Само собой напрашивается дополнительное решение.

В Zend Framework есть компонент zend-escaper, в котором присутствуют все нужные инструменты для экранирования HTML, HTML атрибутов, JavaScript, CSS кода и URL.

Установка

Для работы zend-escaper требуется PHP (версии не ниже 5.5), установить можно через composer:

$ composer require zendframework/zend-escaper

Использование

Для работы с компонентом необходимо создать объект класса Zend\Escaper\Escaper.

use Zend\Escaper\Escaper;

$escaper = new Escaper('iso-8859-1');

Если не указать кодировку символов самим, то компонент выставит значение по умолчанию utf-8. Инициализация без аргументов:

use Zend\Escaper\Escaper;

$escaper = new Escaper();

В классе присутствуют следующие методы:

  • escapeHtml(string $html) : string экранирование HTML кода. Данный метод преобразует символы <, >, на символ &.
  • escapeHtmlAttr(string $value) : string экранирование строки для использования в HTML атрибутах.
  • escapeJs(string $js) : string экранирование JS скрипта, которое преобразует тег <script>. Защита от XSS атак.
  • escapeCss(string $css) : string экранирование CSS кода <style>; Защита от XSS кода.
  • escapeUrl(string $urlPart) : string экранирование URL, а точнее части URL, например параметров.

Пример:

echo $escaper->escapeHtml('<script>alert("zf")</script>');
// результат "<script>alert("zf")</script>"

echo $escaper->escapeHtmlAttr("<script>alert('zf')</script>");
// результат "<script>alert('zf')</script>"

echo $escaper->escapeJs("bar"; alert("zf"); var xss="true");
// результат "bar\x26quot\x3B\x3B\x20alert\x28\x26quot\x3Bzf\x26quot\x3B\x29\x3B\x20var\x20xss\x3D\x26quot\x3Btrue"

echo $escaper->escapeCss("background-image: url('/zf.png?</style><script>alert(\'zf\')</script>');");
// результат "background\2D image\3A \20 url\28 \27 \2F zf\2E png\3F \3C \2F style\3E \3C script\3E alert\28 \5C \27 zf\5C \27 \29 \3C \2F script\3E \27 \29 \3B"

echo $escaper->escapeUrl('/foo " onmouseover="alert(\'zf\')');
// результат "%2Ffoo%20%22%20onmouseover%3D%22alert%28%27zf%27%29"

Где это применять?

  • В файлах шаблонов, будь то zend-view или Plates.
  • В шаблонах электронных писем.
  • В API сериалайзерах для экранирования URL или XML атрибутов.
  • Для защиты от XSS атак.

Пишите безопасные приложения!

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://framework.zend.com/blog/2017-05-16-zend-escaper.html
Перевел: Станислав Протасевич
Урок создан: 9 Июня 2017
Просмотров: 2563
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

  • Совет: активация отображения всех ошибок в PHP

    При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.

^ Наверх ^