Я использую 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"); ?>