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

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

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

    Примечание

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