Как обработчик 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 для предотвращения межсайтового скриптинга или имеет дело с вышеизложенным, о котором я упомянул?

Если вы используете класс Active Record, вам вообще не нужно избегать ничего, что вы отправляете в вашу базу данных – это делается автоматически:

http://codeigniter.com/user_guide/database/active_record.html

«Это также позволяет безопасные запросы, так как эти значения автоматически выходят из системы».

Ручное экранирование, похоже, уходит в прошлое, так как большинство людей теперь используют PDO для взаимодействия с базами данных, используя параметризованные запросы с заполнителями вместо того, чтобы смять SQL-строки вместе. Однако CI все еще использует функции mysql_* .

CI xss_clean() , на мой взгляд, более отказоустойчив для тех из нас, кто не знает, как и когда правильно сбрасывать данные. Вам это обычно не нужно. Это была критика как для медленного, агрессивного подхода к дезинфекции данных, так и для просто «недостаточно хорошего».

Для htmlspecialchars() вывода HTML в большинстве случаев htmlspecialchars() – это все, что вам нужно, но вы можете использовать xss_clean() любое время. Я не предлагаю использовать его в качестве правила проверки формы, потому что он повредит ваш вход, вставив [removed] где бы он ни находился, что-то «озорное» в исходной строке. Вместо этого вы можете просто вызвать его вручную для очистки вывода .

Резюме:

  • База данных: CI (обычно) избегает строк, которые вы передаете классу Active Record.
    Подробнее см. В руководстве пользователя: http://codeigniter.com/user_guide/database/queries.html.

  • Выход HTML: вам нужно вывести HTML-вывод самостоятельно с помощью htmlspecialchars() или использовать функцию htmlspecialchars() CI ( html_escape() с html_escape() 2.1.0). Это не делается автоматически, потому что нет способа узнать контекст, в котором вы используете данные.

  • xss_clean() – Если вы знаете, что делаете, вам не нужно. Лучше использовать на выходе, чем ввод.

Представления по умолчанию CodeIgniter – это всего лишь PHP, поэтому вы можете использовать htmlentities () и htmlspecialchars () в ваших файлах просмотра.

Для экранирования данных в базу данных (т. Е. Предотвращение SQL-инъекции) CodeIgniter предлагает параметризованные запросы. В принципе, положил? в SQl, где вы хотите вставить фрагмент данных, затем укажите все данные в массиве. См. «Связывание запросов» по ​​адресу http://codeigniter.com/user_guide/database/queries.html . Также на этой странице см. «Escaping Queries», в котором описываются обертки CI для функций * _escape_string. Однако привязки запросов / параметризованные запросы являются лучшим подходом.

В кодеджиатрейте, если вы не используете активный класс записи, а только в использовании sql-запроса

 $this->db->escape($varaiable) 

Добавить эту функцию в пользовательский вспомогательный файл

 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\'s \"code"); ?>