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.

  • НИКОГДА НЕ отображайте и не отправляйте пароль в текстовом формате.

  • НЕ устанавливайте ненужные ограничения на пароли ваших пользователей.