Дилемма диктата Codeigniter xss_clean

Я знаю, что этот вопрос задавали снова и снова, но я до сих пор не нашел идеального ответа по своему вкусу, так что вот он снова …

Я читал много и много поляризующих комментариев о Css xss_filter. В основном большинство говорит, что это плохо. Может кто-то уточнить, насколько это плохо или, по крайней мере, дать 1 наиболее вероятный сценарий, где его можно использовать? Я посмотрел на класс безопасности в CI 2.1, и я думаю, что это очень хорошо, так как не допускает вредоносных строк, таких как document.cookie, document.write и т. Д.

Если сайт имеет в основном не-html-презентацию, безопасно ли использовать глобальный xss_filter (или если это ДЕЙСТВИТЕЛЬНО влияет на производительность так сильно, используйте его на основе каждой формы) перед вставкой в ​​базу данных? Я читал о плюсах и минусах о том, следует ли избегать ввода / вывода с большинством голосов, что нам следует избегать только на выходе. Но с другой стороны, почему строки, подобные <a href="javascript:stealCookie()">Click Me</a> будут сохранены в базе данных?

Единственное, что мне не нравится, это javascript: и это будет преобразовано в [removed] . Могу ли я расширить массивы ядра безопасности $_never_allowed_str CI, чтобы никогда не разрешенные строки возвращались пустым, а не [removed] .

Лучший разумный пример неправильного использования этого, который я прочитал, – это если у пользователя есть пароль javascript:123 он будет очищен до [removed]123 что означает, что строка, подобная этому document.write123 , также будет проходить как пароль пользователя. Опять же, какова вероятность того, что это произойдет, и даже если это произойдет, я не могу придумать никакого реального вреда, который может причинить сайту.

благодаря

В основном XSS – проблема OUTPUT, но Codeigniter рассматривает ее как проблему INPUT.

Может кто-то уточнить, как это плохо …

Проблема заключается в том, что xss_clean изменяет ваш INPUT – что означает в некоторых сценариях (например, проблема с паролем, которую вы описали), вход не является ожидаемым.

… или, по крайней мере, дать 1 наиболее вероятный сценарий, где он может быть использован?

Он ищет только определенные ключевые слова, такие как «javascript». Существуют и другие действия скрипта, которые xss_clean не обнаруживает, плюс он не защитит вас от любых «новых» атак.

Единственное, что мне не нравится, это javascript: и это будет преобразовано в [удален]. Могу ли я расширить массивы ядра безопасности $ _never_allowed_str CI, чтобы никогда не разрешенные строки возвращались пустым, а не [удалены]

Вы могли бы это сделать, но вы просто положили бандад на плохое решение.

Я читал о плюсах и минусах о том, следует ли избегать ввода / вывода с большинством голосов, что нам следует избегать только на выходе.

Это правильный ответ – избегайте ВСЕ вашего вывода, и у вас есть настоящая защита XSS, без изменения ввода.

OWASP объясняет больше о XSS здесь

См. Хороший поток форума Codeigniter на XSS

Лично мой подход к защите XSS в Codeigniter – я не делаю никакой очистки XSS на входах. Я запускаю hook на _output – который очищает все мои «view_data» (это переменная, которую я использую для отправки данных в представления).

Я могу переключиться, если я не хочу, чтобы XSS Clean запускался, вставив в мой контроллер «$ view_data ['clean_output] = false», который проверяет хук:

 if (( ! isset($this->CI->view_data['clean_output'])) || ($this->CI->view_data['clean_output'])) { // Apply to all in the list $this->CI->view_data = array_map("htmlspecialchars", $this->CI->view_data); } 

Это дает мне автоматическую и полную защиту XSS на моем сайте – всего пару паролей кода и отсутствие производительности.