Как обработчик Codeigniter выходит из вывода?
Я использую CodeIgniter.
В последнее время я прочитал книгу PHP и увидел некоторые функции для вывода вывода на сервер в базу данных с помощью
*_escape_string()
и от сервера к браузеру, используя:
htmlentities()
htmlspecialchars()
В моем приложении Codeigniter, как обрабатываются эти функции? Является ли он внутренне обработан каркасом или мне нужно вручную его обрабатывать?
В подтверждении формы Ccodeigniter я видел xss_clean
$this->form_validation->set_rules('password', 'Password', 'required|xss_clean|min_length[6]|matches[confirmpassword]' );
Является ли xss_clean
для предотвращения межсайтового скриптинга или имеет дело с вышеизложенным, о котором я упомянул?
Ответы
Ответ 1
Если вы используете класс 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 вывод. Вам нужно вывести HTML-вывод самостоятельно с помощью htmlspecialchars()
или использовать функцию CI html_escape()
(начиная с версии 2.1.0). Это не делается автоматически, потому что нет способа узнать контекст, в котором вы используете данные.
-
xss_clean()
- Если вы знаете, что делаете, вам не нужно. Лучше использовать на выходе, чем ввод.
Ответ 2
По умолчанию представления CodeIgniter - это всего лишь PHP, поэтому вы можете использовать htmlentities() и htmlspecialchars() в ваших файлах просмотра.
Для экранирования данных в базе данных (т.е. предотвращения SQL-инъекции) CodeIgniter предлагает параметризованные запросы. В принципе, положил? в SQl, где вы хотите вставить фрагмент данных, затем укажите все данные в массиве. См. "Связывание запросов" в http://codeigniter.com/user_guide/database/queries.html. Также на этой странице см. "Escaping Queries", в котором описываются обертки CI для функций * _escape_string. Тем не менее, привязки запросов/параметризованные запросы являются лучшим подходом.
Ответ 3
В codeignater, если вы не используете активный класс записи, тогда только в sql-запросе используйте
$this->db->escape($varaiable)
Ответ 4
Добавить эту функцию в пользовательский вспомогательный файл
function escape_output($string)
{
$newString = str_replace('\r\n','<br/>',$string);
$newString = str_replace('\n\r','<br/>',$newString);
$newString = str_replace('\r','<br/>',$newString);
$newString = str_replace('\n','<br/>',$newString);
$newString = str_replace('\'','',$newString);
return $newString;
}
Функция вызова в поле зрения
<?php echo escape_output("Bhavin\ \"code"); ?>
Ответ 5
Вы можете создать вспомогательную функцию:
function my_escape($str) {
if (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return str_replace("'", "''", $str);
}