Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Фильтр входящих данных

При недостаточной обработке входящих данных в шаблонах компонентов и макетах дизайна могут возникать условия для возникновения уязвимостей различных типов:

  • XSS (cross-site scripting) — инъекция HTML- или JavaScript-кода, позволяющая выполнять произвольные скрипты на странице (позволяет перехватить сессию и выполнить некоторые действия от имени уполномоченного пользователя);
  • SQL-инъекция — позволяет получить несанкционированный доступ к базе данных;
  • выполнение PHP-кода в шаблонах и макетах v4 (включая шаблоны навигации для функций s_browse_*) при наличии ошибок в них.

Начиная с версии 5.8 в системе имеется фильтр входящих данных, позволяющий обнаружить и пресечь попытки эксплуатации дефектов в шаблонах компонентов и модулей, а также в макетах дизайна.

Фильтр входящих данных настраивается отдельно для каждого типа инъекций кода (HTML, SQL, PHP) на странице панели управления «Настройки / Безопасность».
Каждый фильтр может работать в одном из режимов:

  • отключено — входящие данные не проверяются;
  • не выполнять действий на странице — будет сгенерировано оповещение, но действий по нейтрализации возможной угрозы предпринято не будет;
  • экранировать параметр и перезагрузить страницу (режим по умолчанию после установки системы) — будет выполнена перезагрузка страницы, при этом значение подозрительного параметра будет экранировано, чтобы предотвратить инъекцию кода;
  • сбросить параметр и перезагрузить страницу — будет выполнена перезагрузка страницы, при этом значение подозрительного параметра будет сброшено;
  • остановить выполнение скрипта — формирование страницы сайта будет остановлено, будет сгенерирован ответ со статусом "500 Server Error".

Кроме того, на этой странице можно включить или выключить оповещения по электронной почте о срабатывании фильтра, а также указать адрес (или несколько адресов через запятую), на которые будут высланы оповещения. Если адрес не указан, оповещения (если они включены) будут высылаться на адрес, указанный в настройках системы (значение «Email отправителя» в разделе «Рассылки»).

Оповещения о срабатывании фильтра высылаются только один раз для каждой страницы для каждой из переменных, в которых обнаружены подозрительные данные.

Ограничения

Фильтры проверяют входящие данные из $_GET, $_POST, $_COOKIE, $_SESSION.

SQL-фильтр срабатывает только для запросов, которые выполнены через класс nc_db() ($db, $nc_core->db).
Если запрос выполнен через функцию mysqli_query(), проверка производиться не будет.

Фильтр PHP-кода срабатывает только в стандартных функциях Netcat. Если код выполнен в шаблоне или макете напрямую через eval(), проверка выполнена не будет.

Так как фильтр работает с кодом перед его выполнением или отдачей, а не в момент формирования соответствующего кода, возможны как ложноположительные срабатывания (кода фильтр сообщает о проблеме, которая не является опасной), так и (реже) ложноотрицательные результаты (кода фильтр не обнаруживает опасную ситуацию).

Программное управление проверками входящих данных

Имеется возможность отключать проверку кода в шаблонах или макетах для каждого из фильтров.

Доступ к каждому из фильтров осуществляется через следующие объекты:

  • $nc_core->security->xss_filter — для фильтра HTML/JavaScript
  • $nc_core->security->sql_filter — для фильтра SQL-запросов
  • $nc_core->security->php_filter — для фильтра PHP-кода

Методы управления проверками для каждого из фильтра:

  • skip_next_check() — фильтр пропустит следующую проверку.
    Например:
    // не проверять следующий SQL-запрос, который будет выполнен через nc_db
    $nc_core->security->sql_filter->skip_next_check();
    
  • ignore_once() — фильтр проигнорирует указанные входящие параметры при следующей проверке. Переменные указываются с указанием источника, с '$', без кавычек, например: $_POST[query], $_GET[srchPat][0].
    Например:
    // при следующей проверке PHP-кода для eval пропустить параметр query:
    $nc_core->security->php_filter->ignore_once('$_GET[query]', '$_POST[query]');
    
    Обратите внимание на экранирование $ (значение должно быть в одинарных кавычках, чтобы не было интерпретировано)!
  • ignore_always() — фильтр проигнорирует указанные входящие параметры при всех последующих проверках. Переменные указываются в том же формате, что и для метода ignore_once().
    Например:
    // игнорировать параметр i_know_what_i_am_doing из $_GET при проверке на XSS-инъекции:
    $nc_core->security->xss_filter->ignore_always('$_GET[i_know_what_i_am_doing]');
    

Использование данных методов не рекомендуется, так как может создать условия для взлома сайта.

Если вы получаете большое количество сообщений о срабатывании фильтра, и при этом уверены, что проблемы в соответствующем коде нет, пожалуйста, напишите в техническую поддержку Netcat с информацией о срабатывании фильтра, чтобы мы могли скорректировать работу фильтра.

Описание проекта