Класс безопасности
Класс Security содержит методы, которые помогают создать защищенное приложение, обрабатывая входные данные с точки зрения безопасности.
Фильтрация XSS
CodeIgniter поставляется с фильтром предотвращения межсайтовых скриптов (XSS), который ищет распространённые методы для запуска JavaScript или других типов кода, которые пытаются перехватить куки или совершить другие вредоносные действия. Если обнаружен запрещённый код, он обрабатывается безопасным образом путём преобразования данных в символьные сущности.
Для фильтрации данных через фильтр XSS используется метод xss_clean():
$data = $this->security->xss_clean($data);
Необязательный второй параметр is_image позволяет использовать эту функцию для проверки изображений на возможные атаки XSS, что полезно для обеспечения безопасности при загрузке файлов. Когда этот второй параметр установлен в TRUE, вместо возвращения изменённой строки функция возвращает TRUE, если изображение безопасно, и FALSE, если оно содержит потенциально вредоносную информацию, которую браузер может попытаться выполнить.
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// file failed the XSS test
}
Важно
Если вам нужно отфильтровать значения атрибутов HTML, используйте html_escape() вместо этого!
Защита от межсайтовых поддельных запросов (CSRF)
Вы можете включить защиту от CSRF, изменив файл application/config/config.php следующим образом:
$config['csrf_protection'] = TRUE;
Если вы используете помощник форм form helper, то form_open() автоматически вставит скрытое поле csrf в ваши формы. Если нет, то вы можете использовать get_csrf_token_name() и get_csrf_hash()
$csrf = array(
'name' => $this->security->get_csrf_token_name(),
'hash' => $this->security->get_csrf_hash()
);
...
<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
Токены могут быть либо сгенерированы заново при каждой отправке (по умолчанию), либо оставаться неизменными на протяжении всего срока действия cookie CSRF. По умолчанию, перегенерирование токенов обеспечивает более строгую безопасность, но может вызвать проблемы с удобством использования, поскольку другие токены станут недействительными (назад/вперёд, несколько вкладок/окон, асинхронные действия и т. д.). Вы можете изменить это поведение, отредактировав следующий параметр конфигурации:
$config['csrf_regenerate'] = TRUE;
Некоторые URI могут быть включены в белый список для защиты от CSRF (например, API-пункты, ожидающие внешне отправляемый POST-контент). Вы можете добавить эти URI, изменив параметр конфигурации ‘csrf_exclude_uris’:
$config['csrf_exclude_uris'] = array('api/person/add');
Также поддерживаются регулярные выражения (регистронезависимые):
$config['csrf_exclude_uris'] = array(
'api/record/[0-9]+',
'api/title/[a-z]+'
);
Справочник класса
-
class CI_Security -
-
xss_clean($str[, $is_image = FALSE]) -
Параметры: - $str (mixed) – Входная строка или массив строк
Возвращает: Данные, очищенные от XSS
Тип возвращаемого значения: mixed
Пытается удалить XSS-уязвимости из входных данных и возвращает очищенную строку. Если необязательный второй параметр установлен в true, то он вернёт boolean TRUE, если изображение безопасно для использования, и FALSE, если в нём обнаружены вредоносные данные.
Важно
Этот метод не подходит для фильтрации значений атрибутов HTML! Для этого используйте
html_escape().
-
sanitize_filename($str[, $relative_path = FALSE]) -
Параметры: - $str (string) – Имя/путь файла
- $relative_path (bool) – Нужно ли сохранить каталоги в пути к файлу
Возвращает: Очищенное имя/путь файла
Тип возвращаемого значения: string
Пытается очистить имена файлов, чтобы предотвратить попытки обхода каталогов и другие угрозы безопасности, что особенно полезно для файлов, которые были предоставлены пользователем.
$filename = $this->security->sanitize_filename($this->input->post('filename'));Если для входных данных пользователя допустимо включение относительных путей, например file/in/some/approved/folder.txt, вы можете установить второй необязательный параметр
$relative_pathв TRUE.$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
-
get_csrf_token_name() -
Возвращает: Имя токена CSRF Тип возвращаемого значения: string Возвращает имя токена CSRF (значение
$config['csrf_token_name']).
-
get_csrf_hash() -
Возвращает: Хэш CSRF Тип возвращаемого значения: string Возвращает значение хэша CSRF. Полезно в сочетании с
get_csrf_token_name()для ручного построения форм или отправки валидных AJAX POST-запросов.
-
entity_decode($str[, $charset = NULL]) -
Параметры: - $str (string) – Входная строка
- $charset (string) – Кодировка входной строки
Возвращает: Строка с расшифрованными сущностями
Тип возвращаемого значения: string
Этот метод очень похож на встроенную функцию PHP
html_entity_decode()в режиме ENT_COMPAT, только он пытается обнаружить HTML-сущности, которые не заканчиваются точкой с запятой, потому что некоторые браузеры это позволяют.Если параметр
$charsetоставлен пустым, то будет использовано ваше конфигурированное значение$config['charset'].
-
get_random_bytes($length) -
Параметры: - $length (int) – Длина вывода
Возвращает: Бинарный поток случайных байтов или FALSE при ошибке
Тип возвращаемого значения: string
Удобный метод для получения правильных случайных байтов через
mcrypt_create_iv(),/dev/urandomилиopenssl_random_pseudo_bytes()(в таком порядке), если один из них доступен.Используется для генерации токенов CSRF и XSS.
Примечание
Вывод НЕ гарантируется как криптографически безопасный, просто сделана лучшая попытка.
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/security.html