Класс 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);