Учебники

CodeIgniter — Безопасность

XSS означает межсайтовый скриптинг. CodeIgniter поставляется с безопасностью фильтрации XSS. Этот фильтр предотвратит любой вредоносный код JavaScript или любой другой код, который пытается захватить куки и совершать вредоносные действия. Чтобы отфильтровать данные через фильтр XSS, используйте метод xss_clean (), как показано ниже.

$data = $this->security->xss_clean($data);

Эту функцию следует использовать только при отправке данных. Необязательный второй логический параметр также можно использовать для проверки файла изображения на предмет атаки XSS. Это полезно для загрузки файлов. Если его значение истинно, значит, изображение безопасно, а не иначе.

Предотвращение SQL-инъекций

SQL-инъекция — это атака на запрос к базе данных. В PHP мы используем функцию mysql_real_escape_string (), чтобы предотвратить это, наряду с другими методами, но CodeIgniter предоставляет встроенные функции и библиотеки для предотвращения этого.

Мы можем предотвратить SQL-инъекцию в CodeIgniter следующими тремя способами:

  • Побег Запросы
  • Query Biding
  • Active Record Class

Побег Запросы

<?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 () автоматически добавляет одинарные кавычки вокруг данных и определяет тип данных, так что она может экранировать только строковые данные.

Query Biding

<?php
   $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
   $this->db->query($sql, array(3, 'live', 'Rick'));
?>

В приведенном выше примере знак вопроса (?) Будет заменен массивом во втором параметре функции query (). Основным преимуществом построения запроса таким образом является то, что значения автоматически экранируются, что создает безопасные запросы. Движок CodeIgniter делает это автоматически, поэтому вам не нужно это запоминать.

Active Record Class

<?php
   $this->db->get_where('subscribers_tbl',array
      ('status'=> active','email' => 'info@arjun.net.in'));
?>

Используя активные записи, синтаксис запроса генерируется каждым адаптером базы данных. Это также позволяет более безопасные запросы, так как значения экранируются автоматически.

Скрытие ошибок PHP

В производственной среде мы часто не хотим отображать какие-либо сообщения об ошибках для пользователей. Хорошо, если он включен в среде разработки для целей отладки. Эти сообщения об ошибках могут содержать некоторую информацию, которую мы не должны показывать пользователям сайта по соображениям безопасности.

Есть три файла CodeIgniter, связанных с ошибками.

Уровень отчетов об ошибках PHP

Различная среда требует разных уровней сообщений об ошибках. По умолчанию при разработке будут отображаться ошибки, но тестирование и вживую будут их скрывать. В корневой директории CodeIgniter есть файл index.php , который используется для этой цели. Если мы передадим ноль в качестве аргумента функции 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.

НЕ отображать и не отправлять пароль в текстовом формате.

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