CodeIgniter User Guide Version 2.0.0


Класс Security (безопасность)

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

Фильтрация XSS

CodeIgniter поставляется с защитой от взлома Cross Site Scripting (XSS), которая фильтрует входящие данные POST и COOKIE. Фильтрация может запускаться автоматически или вы можете вручную указывать элементы, которые следует отфильтровать. По умолчанию фильтрация НЕ запускается глобально, так как является ресурсоемкой функцией, в использовании которой вы можете не нуждаться буквально в каждом случае.

Фильтр XSS смотрит на часто используемые техники Javascript или других видов кода, захватывающих куки или совершающие другие небезопасные вещи. Если приходит что-то неразрешенное, часть символов опасного синтаксиса заменяются на безопасные аналоги.

Примечание: эта функция может использоваться только на момент получения данных. Она не используется в общем процессе, так как несет существенные накладные расходы.

Для фильтрации данных через фильтр XSS используйте эту функцию:

$this->security->xss_clean()

Вот пример использования:

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

Если вы хотите запускать фильтрацию каждый раз, когда приходят данные POST или COOKIE, откройте ваш application/config/config.php и установите так:

$config['global_xss_filtering'] = TRUE;

Примечание: Если вы используете класс Validation, он также дает вам опцию XSS фильтрации.

Второй опциональный параметр, is_image, позволяет этой функции использоваться, чтобы тестировать изображения на предмет потенциальных XSS атак, что полезно для безопасности при загрузке файлов. Когда этот параметр установлен в TRUE, функция вернет TRUE, если изображение безопасно, или FALSE если оно содержит потенциально опасную информацию, которая может повлиять на браузер.

if ($this->security->xss_clean($file, TRUE) === FALSE)
{
    // файл не прошел тест на XSS
}

$this->security->sanitize_filename()

При приеме имен файлов из пользовательского ввода, лучше очищать их для предотвращения обхода каталогов и других известных проблем с безопасностью. Чтобы сделать это, используйте метод sanitize_filename() класса Security. Вот и пример:

$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);