Ответ 1
мой вход предотвращен от SQL-инъекции?
Не точно "автоматически", но он предоставляет параметризованные запросы. CodeIgniter или нет, вы должны использовать параметризованные запросы, предпочитая хакерство строки запроса, когда это возможно.
$bof= "a'b";
$zot= 'a\b';
// Insecure! Don't do this!
//
$this->db->query("SELECT foo FROM bar WHERE bof='$bof' AND zot='$zot'");
// Secure but annoying to write
//
$this->db->query("SELECT foo FROM bar WHERE bof='".$this->db->escape($bof)."' AND zot='".$this->db->escape($zot)."'");
// This is what you want
//
$this->db->query('SELECT foo FROM bar WHERE bof=? AND zot=?', array($bof, $zot));
Обратите внимание, что это не связано с "вводом: когда вы делаете SQL-запрос из строк, вы должны использовать параметризацию или экранирование, чтобы они соответствовали, независимо от того, введен они пользователем или нет. Это вопрос простой правильности; безопасность является побочным эффектом этой корректности.
Аналогично, когда вы выводите текст в HTML, тогда вам нужно кодировать HTML-код <
, &
и "
. Это абсолютно бесполезно, пытаясь возиться с входом, чтобы избежать или удалить символы, которые могут быть неприятными в будущем, если вы используете их без экранирования в SQL или HTML. Вы отмените свой вывод, вызвав неожиданное SQL-экранирование в HTML (именно поэтому вы видите самомножающиеся обратные косые черты в плохо написанных приложениях) и нежелательное экранирование HTML в SQL. И если вы берете текст откуда-то, кроме этого прямого ввода пользователем (скажем, материала уже в базе данных), вы вообще не защищены.
Также xssclean справляется с SQL-инъекцией каким-либо образом?
Нет. Он нацелен на HTML-инъекцию. Но это хуже, чем бесполезно. Никогда не используйте его.
"XSS-фильтрация" полностью фиктивная (опять же, CodeIgniter или кто-то еще). XSS должен быть предотвращен корректным выводом HTML-вывода, а не изменением ввода. XSS-фильтрация не будет адекватно защищать вас, если ваше приложение еще не безопасно; в лучшем случае это будет запутывать ваши существующие недостатки и дать вам ложное чувство безопасности. Он также будет калечить много допустимых входных данных, которые CI считает похожими на теги.