Класс безопасности 

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

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]+'
);

Справка класса 

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 токенов.

Примечание

Вывод НЕ гаранитирует быть криптографически стойкой, просто хорошая попытка.