Как обработчик 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);
}