Если вы используете класс Active Record, вам обычно не нужно экранировать все, что вы отправляете в базу данных - это делается автоматически:
http://codeigniter.com/user_guide/database/active_record.html
"Это также позволяет выполнять более безопасные запросы, поскольку значения автоматически экранируются системой."
Ручное экранирование, похоже, уходит в прошлое, так как большинство людей сейчас используют PDO для взаимодействия с базой данных, используя параметризованные запросы с заполнителями вместо слияния строк SQL. CI все еще использует функции mysql_*
для внутреннего использования.
CI xss_clean()
, на мой взгляд, более безопасен для тех из нас, кто не знает, как и когда правильно экранировать данные. Обычно вам это не нужно. Это стало объектом критики как за медленный, агрессивный подход к санации данных, так и за то, что он «недостаточно хорош».
Для экранирования вывода HTML в большинстве случаев htmlspecialchars()
- это все, что вам нужно, но вы можете использовать функцию xss_clean()
в любое время. Я не предлагаю использовать его в качестве правила проверки формы, потому что это повредит ваш ввод, вставив [removed]
, где бы он ни нашел что-нибудь «непослушное» в исходной строке. Вместо этого вы можете просто вызвать его вручную, чтобы очистить вывод .
Резюме:
База данных: CI (обычно) будет экранировать строки, передаваемые в класс Active Record.
Подробнее см. В руководстве пользователя: http://codeigniter.com/user_guide/database/queries.html
HTML output : Вам необходимо самостоятельно выйти из вывода HTML с помощью htmlspecialchars()
или использовать функцию CI html_escape()
(по состоянию на 2.1.0). Это , а не выполняется автоматически, потому что нет способа узнать контекст, в котором вы используете данные.
xss_clean()
- Если вы знаете, что делаете, вам это не нужно. Лучше использовать на выходе, чем на входе.