Вводная фильтрация CodeIgniter

Я работаю над сайтом, перечисляющим книги, и столкнулся с проблемой фильтрации xss-кода. Когда форма отправляется для создания листинга, любой заголовок, который включает в себя «Javascript:», заменяется на «[УДАЛЕНЫ]». Я попытался получить доступ к данным из массива POST следующим образом:

$title = $_POST['title']; 

чтобы избежать использования класса Input, но он все равно каким-то образом фильтруется. Есть ли способ обойти это, что не связано с отключением global_xss_filtering?

Related of "Вводная фильтрация CodeIgniter"

Есть ли способ обойти это, что не связано с отключением global_xss_filtering?

Прошу прощения, но нет. Вы должны отключить его, поскольку он рано меняет исходные данные в начале выполнения CI.

Я мог бы на 5 страниц рассказать о правильном использовании фильтра xss, но я постараюсь сделать его кратким:

  • Выход фильтра, а не вход
  • Всегда держите контекст в уме и убегайте соответствующим образом (это текстовый файл HTML? SQL? Javascript?)
  • Глобальный фильтр является защитным одеялом. Вы можете удалить его, как только узнаете, что делаете.

Вот лишь один из многих трагических примеров того, почему глобальный фильтр XSS – это плохая идея:

  • Пользователь регистрируется для учетной записи и устанавливает пароль для document.write123
  • Вы обрабатываете пароль и заканчиваете хэширование строки [removed]123
  • Теперь пользователь может войти в систему с помощью любого из следующих паролей, потому что они также будут преобразованы в фильтр [removed]123 , прежде чем вы их проверите:

    • <script>123
    • document.write123
    • document.cookie123
    • и так далее …

Этого не должно быть. Пользователь не должен входить в систему с несколькими паролями (если только это не по дизайну … я полагаю).

Кроме того, удачи, сохраняя любые ваши сообщения в блоге, которые используют <iframe> s … YouTube-видео, например.