CodeIgniter - Безопасность
Предотвращение XSS
XSS означает межсайтовый скриптинг. CodeIgniter поставляется с защитой XSS-фильтрации. Этот фильтр предотвратит любой вредоносный код JavaScript или любой другой код, который пытается захватить cookie и выполнять вредоносные действия. Чтобы отфильтровать данные через фильтр XSS, используйтеxss_clean() метод, как показано ниже.
$data = $this->security->xss_clean($data);
Эту функцию следует использовать только при отправке данных. Необязательный второй логический параметр также может использоваться для проверки файла изображения на предмет XSS-атаки. Это полезно для загрузки файлов. Если его значение истинно, это означает, что изображение безопасно, а не иначе.
Предотвращение внедрения SQL
SQL-инъекция - это атака на запрос к базе данных. В PHP мы используемmysql_real_escape_string() функция, чтобы предотвратить это вместе с другими методами, но CodeIgniter предоставляет встроенные функции и библиотеки для предотвращения этого.
Мы можем предотвратить SQL-инъекцию в CodeIgniter следующими тремя способами:
- Экранирование запросов
- Ставка запроса
- Класс Active Record
Экранирование запросов
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape() Функция автоматически добавляет данные в одинарные кавычки и определяет тип данных, чтобы исключить только строковые данные.
Ставка запроса
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
В приведенном выше примере знак вопроса (?) Будет заменен массивом во втором параметре функции query (). Основное преимущество построения запроса таким способом заключается в том, что значения автоматически экранируются, что создает безопасные запросы. Движок CodeIgniter делает это за вас автоматически, поэтому вам не нужно его запоминать.
Класс Active Record
<?php
$this->db->get_where('subscribers_tbl',array
('status'=> active','email' => '[email protected]'));
?>
Используя активные записи, каждый адаптер базы данных генерирует синтаксис запроса. Это также позволяет выполнять более безопасные запросы, поскольку значения экранируются автоматически.
Скрытие ошибок PHP
В производственной среде мы часто не хотим показывать пользователям какие-либо сообщения об ошибках. Хорошо, если он будет включен в среде разработки для целей отладки. Эти сообщения об ошибках могут содержать некоторую информацию, которую мы не должны показывать пользователям сайта из соображений безопасности.
Есть три файла CodeIgniter, связанных с ошибками.
Уровень отчетов об ошибках PHP
В разных средах требуются разные уровни отчетов об ошибках. По умолчанию при разработке будут отображаться ошибки, но при тестировании и в реальном времени они будут скрыты. Есть файл с названиемindex.phpв корневом каталоге CodeIgniter, который используется для этой цели. Если мы передадим ноль в качестве аргумента вerror_reporting() функция, которая скроет все ошибки.
Ошибка базы данных
Даже если вы отключили ошибки PHP, ошибки MySQL остаются открытыми. Вы можете выключить это вapplication/config/database.php. Установитьdb_debug вариант в $db массив в FALSE как показано ниже.
$db['default']['db_debug'] = FALSE;
Журнал ошибок
Другой способ - передать ошибки в файлы журналов. Таким образом, он не будет отображаться пользователям на сайте. Просто установитеlog_threshold ценность в $config массив до 1 дюйма application/cofig/config.php файл, как показано ниже.
$config['log_threshold'] = 1;
Предотвращение CSRF
CSRF означает подделку межсайтовых запросов. Вы можете предотвратить эту атаку, включив ее вapplication/config/config.php файл, как показано ниже.
$config['csrf_protection'] = TRUE;
Когда вы создаете форму, используя form_open()функция, он автоматически вставит CSRF как скрытое поле. Вы также можете вручную добавить CSRF, используяget_csrf_token_name() а также get_csrf_hash()функция. Вget_csrf_token_name() функция вернет имя CSRF и get_csrf_hash() вернет хеш-значение CSRF.
Токен CSRF можно повторно создавать каждый раз для отправки, или вы также можете сохранить его неизменным на протяжении всего срока службы файла cookie CSRF. Установив значениеTRUE, в массиве конфигурации с ключом ‘csrf_regenerate’ восстановит токен, как показано ниже.
$config['csrf_regenerate'] = TRUE;
Вы также можете занести в белый список URL-адреса от защиты CSRF, установив их в массиве конфигурации с помощью ключа ‘csrf_exclude_uris’как показано ниже. Вы также можете использовать регулярное выражение.
$config['csrf_exclude_uris'] = array('api/person/add');
Обработка паролей
Многие разработчики не знают, как обращаться с паролями в веб-приложениях, вероятно, поэтому многие хакеры считают, что взломать системы так легко. При работе с паролями следует помнить о следующих моментах:
НЕ храните пароли в текстовом формате.
Всегда хешируйте свои пароли.
НЕ используйте Base64 или аналогичную кодировку для хранения паролей.
НЕ используйте слабые или неработающие алгоритмы хеширования, такие как MD5 или SHA1. Используйте только надежные алгоритмы хеширования паролей, такие как BCrypt, который используется в собственных функциях хеширования паролей PHP.
НИКОГДА НЕ отображайте и не отправляйте пароль в текстовом формате.
НЕ устанавливайте ненужные ограничения на пароли ваших пользователей.