CodeIgniter входная фильтрация - PullRequest
2 голосов
/ 13 марта 2012

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

$title = $_POST['title'];

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

1 Ответ

9 голосов
/ 13 марта 2012

Есть ли способ обойти это, не включая отключение 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, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...