Автор Тема: Советы по работе с init_sanitize.php  (Прочитано 296 раз)

Оффлайн AndrewBerezin

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 108
    • Просмотр профиля
Советы по работе с init_sanitize.php
« : 27 Декабря 2016, 15:49:26 »
Цитата с форума oscommerce
Цитата: Yesaul
Мелкая заметка, так сказать, на память о двух часах, потраченных не самым продуктивным образом.
Мб, я кому-то съэкономлю немного времени...

При переходе с версий 1.3.9-1.5.1 следует знать, что в версии 1.5.5 снова появился код в файле admin/includes/init_includes/init_sanitize.php

(Пишу "снова появился код", так как в версиях 1.3.9-1.5.1 этот файл был "пустой", с комментом, что он (файл) больше не нужен и мб удален)

Это важно, если в магазине используются какие-либо дополнительные (нестандартные) поля  - эти поля дб прописаны в init_sanitize.php, иначе их обработка может производиться некорректно.

О том, как наиболее грамотно и осмысленно модифицировать упомянутый файл, рассуждать, пожалуй, не возьмусь...
Появление этого санитара обусловлено требованиями PCI-DSS / PA-DSS.
Кстати, подобный подход обсуждался на форуме оскоммерсе более 10 лет назад.

Как пользоваться. В санитаре почему нет привычного механизма $zco_notifier->notify. Но зато при инициализации класса санитара предусмотрительно проверяется, а не инициализирован ли он ранее? Это позволяет перехватить инициализацию и добавить правила проверки для своих переменных.
Покажу на примере.

У меня есть модуль новостей. При сохранении лида и самой новости они преобразовывались санитаром в соответствии с правилами по умолчанию.
Добавляем свои правила:
Инициализация <your_admin>\includes\auto_loaders\config.eznews.php:
<?php
/**
 * @package Admin
 * @copyright Copyright 2005-2016 Andrew Berezin eCommerce-Service.com
 * @copyright Copyright 2003-2016 Zen Cart Development Team
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: config.eznews.php 3.2 12.09.2012 14:14:39 AndrewBerezin $
 */

  
$autoLoadConfig[19][] = array('autoType' => 'init_script',
                                
'loadFile' => 'init_sanitize_eznews.php');

// EOF
Добавляем свои правила обработки <your_admin>\includes\init_includes\init_sanitize_eznews.php:
<?php
/**
 * init_sanitize
 *
 * @package initSystem
 * @copyright Copyright 2005-2016 Andrew Berezin eCommerce-Service.com
 * @copyright Copyright 2003-2016 Zen Cart Development Team
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: init_sanitize_eznews.php 1.0.0 23.12.2016 14:13:47 AndrewBerezin $
 */

if (class_exists('AdminRequestSanitizer')) {
  
$sanitizer AdminRequestSanitizer::getInstance();
  
$group = array('news_lead''news_content');
  
$sanitizer->addSimpleSanitization('PRODUCT_DESC_REGEX'$group);
}

// EOF

Здесь используется фильтр для html-контента - 'PRODUCT_DESC_REGEX'.
Таких фильтров несколько. Если у кого-то возникнет интерес, то я распишу все эти фильтры. Хотя уверен, что разработчик и сам в состоянии разобраться, а простому пользователю это не нужно :)