Проблема заключается в следующем:
При включенном глобальном xss_clean все данные $_GET
, $_POST
и $_COOKIE
очищаются конструктором класса Input с помощью _sanitize_globals()
.
Это происходит слишком рано при выполнении CI, чтобы вы что-то предприняли позже. Как только данные были xss_cleaned
, их невозможно очистить.
У вас есть два варианта:
- Использовать предварительную систему крючок
- Отключить глобальный xss_clean
У меня нет никаких советов по использованию ловушки для этого, но я рекомендую просто отключить глобальный xss_clean по нескольким причинам:
Очевидно: это не изменит данные, и поставит вас под контроль, поощряя вас помнить о том, когда и где на самом деле могут происходить атаки XSS.
Функция xss_clean довольно тяжелая и агрессивная, и в большинстве случаев она вам не нужна. Запуск его в каждый элемент post, get и cookie сокращает время выполнения.
Довольно просто добавить xss_clean
в качестве правила проверки формы или использовать $this->security->xss_clean()
В качестве лучшей практики все равно следует дезинфицировать свои данные и вывод HTML, вместо того чтобы доверять глобальному фильтру и забывать об этом.
Мне нужно было разрешить, например, <script>
теги для CMS, и отключение глобального фильтра было единственным способом их пропустить. Это большое изменение и может заставить вас нервничать, но, к сожалению, это единственный способ (если вы не можете понять, как написать хук, который поможет).
Как уже упоминалось в комментариях, он не должен фильтровать <strong>
теги ...