- class CI_Security
- xss_clean($str[, $is_image = FALSE])
Параметры: - $str (смешанный) – Введенная строка или массив строк
Возвращает: XSS-очищенные данные
Возвращаемый тип: смешанный
Пытается удалить XSS уязвимости из входных данных и возвращает очищенный строку. Если второй необязательный параметр имеет значение true, то вернет булево TRUE если изображение является безопасным для использования и FALSE если вредоносный код был обнаружен.
- sanitize_filename($str[, $relative_path = FALSE])
Параметры: - $str (строка) – Путь/имя файла
- $relative_path (булево) – Стоит ли сохранять все каталоги в пути к файлу
Возвращает: Облагороженное путь/имя файла
Возвращаемый тип: строка
Пытается санировать имена файлов в целях предотвращения попыток обхода каталога и других угроз безопасности, что особенно полезно для файлов, которые были получены от пользователя.
$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 имя токена Возвращаемый тип: строка Возвращает CSRF имя токена ($config['csrf_token_name'] значение).
- get_csrf_hash()
Возвращает: CSRF хеш Возвращаемый тип: строка Возвращает CSRF хеш значение. Полезно в сочетании сget_csrf_token_name() для построения форм вручную или отправке AJAX POST запросов.
- entity_decode($str[, $charset = NULL])
Параметры: - $str (строка) – Входная строка
- $charset (строка) – Набор символов входной строки
Возвращает: Декодированная строка
Возвращаемый тип: строка
Этот метод действует очень похоже на родную PHP html_entity_decode() функцию в ENT_COMPAT режиме, только он пытается определить HTML-объекты, которые не заканчиваются точкой с запятой.
Если $charset параметр пуст, тогда ваша конфигурация $config['charset'] будет использована.
- get_random_bytes($length)
Параметры: - $length (число) – Длина выходных данных
Возвращает: Двоичный поток случайных байт или false в случае неудачи
Возвращаемый тип: строка
Метод для получения соответствующих случайных байт через mcrypt_create_iv(), /dev/urandom или openssl_random_pseudo_bytes() (в таком порядке), если один из них доступен.
Используется для создания CSRF и XSS токенов.
Примечание
Вывод НЕ гаранитирует быть криптографически стойкой, просто хорошая попытка.
Класс безопасности
Класс безопасности содержит методы, которые помогут создать безопасное приложение, обрабатывающее входные данные для безопасности.
XSS Фильтрация
CodeIgniter поставляется с фильтрацией предотвращения межсайтовых сценариев (Cross Site Scripting), для часто используемых методов запуска JavaScript или других типов кода, которые пытаются захватить куки(cookies) или сделать другие вредоносные вещи. Если встречается что-то запрещенное, оно становится безопасной при конвертации данных в символьные сущности.
Чтобы фильтровать данные путем XSS используйте xss_clean() метод:
$data = $this->security->xss_clean($data);
Необязательный второй параметр, is_image, позволяет этой функции использование тестирования изображений на потенциальные XSS атаки, полезно для безопасности при загрузке файлов. Когда второй параметр установлен в TRUE, вместо того, чтобы вернуть измененную строку, функция возвращает TRUE если изображение является безопасным и FALSE если в нем содержатся потенциально опасные сведения, которые браузер может попытаться выполнить.
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// файл не прошел XSS тест
}
Подделки межсайтовых запросов (CSRF)
Можно включить CSRF защиту путем изменения своего application/config/config.php файла следующим образом:
$config['csrf_protection'] = TRUE;
Если вы используете хелпер форм, тогда 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'];?>" />
Токены могут быть созданы при каждой передаче (по умолчанию) или же сохранятся в течение всей жизни CSRF куки. Создание токенов по умолчанию предусматривает усиление безопасности, что может сказаться на юзабилити, так как другие токены становятся недействительными (назад/вперед в навигации, вкладки/окна, асинхронные действия). Вы можете изменить это поведение путем изменения следующих параметров конфигурации
$config['csrf_regenerate'] = TRUE;
URI могут быть внесены в белый список от csrf защиты (например, конечные точки API ожидая удаленного размещенния контента). Вы можете добавить эти 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]+'
);