Защита от XSS¶
В версии 4.3.1 появился функционал, позволяющий удалять все HTML-теги, заэкранировать их, либо выборочно вырезать “опасные” HTML-теги и JavaScript-код из данных, введённых пользователями. Для этого используется сторонняя библиотека HTMLPurifier
, и обёртка над ней — класс Tygh\Tools\SecurityHelper
.
SecurityHelper реализует метод sanitizeObjectData()
, позволяющий обработать данные объектов согласно правилам, расположенным в схеме app/schemas/security/object_sanitization.php. Данный метод вызывается в функциях fn_update_category()
, fn_update_product()
, fn_update_product_option()
, fn_update_page()
, fn_update_company()
, fn_form_builder_update_page_post()
, fn_buy_together_update_chain()
.
Описание правил обработки в схеме задаётся следующим образом:
use Tygh\Tools\SecurityHelper;
$schema = array(
// product - тип объекта
'product' => array(
SecurityHelper::SCHEMA_SECTION_FIELD_RULES => array(
// название поля => действие
// SecurityHelper::ACTION_REMOVE_HTML - из поля все HTML-теги будут вырезаны
// SecurityHelper::ACTION_SANITIZE_HTML - будут выборочно вырезаны "опасные" теги и JS-код
// SecurityHelper::ACTION_ESCAPE_HTML - специальные HTML-символы будут заэкранировны
'shortname' => SecurityHelper::ACTION_REMOVE_HTML,
'meta_description' => SecurityHelper::ACTION_REMOVE_HTML,
'meta_keywords' => SecurityHelper::ACTION_REMOVE_HTML,
'search_words' => SecurityHelper::ACTION_REMOVE_HTML,
'page_title' => SecurityHelper::ACTION_REMOVE_HTML,
'age_warning_message' => SecurityHelper::ACTION_REMOVE_HTML,
'product_code' => SecurityHelper::ACTION_REMOVE_HTML,
'short_description' => SecurityHelper::ACTION_SANITIZE_HTML,
'full_description' => SecurityHelper::ACTION_SANITIZE_HTML,
'promo_text' => SecurityHelper::ACTION_SANITIZE_HTML,
'product' => SecurityHelper::ACTION_SANITIZE_HTML,
)
),
...
);
Действия SecurityHelper::ACTION_SANITIZE_HTML
будут выполнены только в том случае, если это разрешено в настройке config.tweaks.sanitize_user_html. Настройка может принимать три значения: auto
, true
и false
. По умолчанию установлено значение auto
, что означает true
для Multi-Vendor и false
для CS-Cart.