Почему XSS-фильтр CodeIgniter не очищает все? - PullRequest
0 голосов
/ 11 июня 2011

Почему XSS-фильтр CodeIgniter реагирует только через регулярные выражения на определенные вещи, а не дезинфицирует весь ввод в первую очередь, независимо от того, испорчен ли контент или нет?Кроме того, почему это делается во время ввода, а не на выходе (как должно быть?)

1 Ответ

8 голосов
/ 11 июня 2011

Почему XSS-фильтр CodeIgniter реагирует только через регулярные выражения на определенные вещи, а не дезинфицирует весь ввод в первую очередь, независимо от того, испорчен ли контент?

Это не имеет особого смысла. Как мы можем определить, является ли что-то «испорченным», не проверив это сначала?

По определению CI xss_clean() мы не всегда хотим очистить ввод. Как вы упомянули, важен вывод - и именно здесь мы должны помнить о XSS-атаках . Если мы всегда"дезинфицируем" ввод с помощью CI xss_clean(), то как, например, я могу публиковать примеры кода javascript или PHP в моем блоге или позволять пользователям делать это в комментариях? В итоге получится [removed].

Кроме того, почему это делается во время ввода, а не на выходе (как должно быть?)

У вас есть возможность включить глобальный xss-фильтр в вашей конфигурации CI, который будет запускать xss_clean() для $_POST, $_GET и $_COOKIE данных автоматически, прежде чем вы сможете его получить. Это самый низкий уровень защиты от вас самих, но всегда доступна опция для явной очистки данных. Например:

// With the Input class on $_POST data
$this->input->post('username', TRUE); // Second parameter runs xss_clean

 // Using the Security class on any data
$this->security->xss_clean($username);

// Using the Form Validation class to automatically clean the input
$this->form_validation->set_rules('username', '', 'xss_clean');

Поскольку вы все равно можете просто использовать $_POST['username'], включив глобальный фильтр, он уже будет для вас xss_cleaned. Это ленивый способ сделать это, и, к сожалению, как только эти глобалы будут очищены, отменить это невозможно.

Если вы уже знаете, когда и где могут происходить XSS-атаки, вы можете легко использовать эту функцию, если хотите. Имейте в виду, что это не волшебным образом делает все данные «безопасными», это просто предотвращает некоторые из более вредоносных внедрений кода. Что-то более безобидное, например </div>, пройдет через этот фильтр. Вы всегда должны явно очищать входные данные соответствующим образом для контекста, в котором они используются.

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