Почему 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>
, пройдет через этот фильтр. Вы всегда должны явно очищать входные данные соответствующим образом для контекста, в котором они используются.