При недостаточной обработке входящих данных в шаблонах компонентов и макетах дизайна могут возникать условия для возникновения уязвимостей различных типов:
s_browse_*
) при наличии ошибок в них.Начиная с версии 5.8 в системе имеется фильтр входящих данных, позволяющий обнаружить и пресечь попытки эксплуатации дефектов в шаблонах компонентов и модулей, а также в макетах дизайна.
Фильтр входящих данных настраивается отдельно для каждого типа инъекций кода (HTML, SQL, PHP) на странице панели управления «Настройки / Безопасность».
Каждый фильтр может работать в одном из режимов:
Кроме того, на этой странице можно включить или выключить оповещения по электронной почте о срабатывании фильтра, а также указать адрес (или несколько адресов через запятую), на которые будут высланы оповещения. Если адрес не указан, оповещения (если они включены) будут высылаться на адрес, указанный в настройках системы (значение «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 с информацией о срабатывании фильтра, чтобы мы могли скорректировать работу фильтра.