Безопасность
Эта страница описывает некоторые "хорошие практики" в отношении веб-безопасности, и информацию о встроенных функциях безопасности CodeIgniter.
Безопасность URI
CodeIgniter предъявляет строгие ограничения к символам, разрешенным в строках URI для того, чтобы помочь минимизировать возможность передачи потенциально опасных данных в ваше приложение. URI могут содержать только следующее:
- Символы алфавита и цифры
- Тильду: ~
- Точку: .
- Двоеточие: :
- Знак подчеркивания: _
- Дефис: -
Данные GET, POST и COOKIE
GET просто запрещен в CodeIgniter, так как система использует сегменты URI вместо традиционных строк запроса (если вы не разрешили использование строки запроса в конфигурации). Глобальный массив GET удаляется классом Input при инициализации системы.
Register_globals
При инициализации системы все глобальные переменные удаляются, за исключением массивов $_POST и $_COOKIE. Процедура удаления также эффективна, как и register_globals = off.
magic_quotes_runtime
Директива magic_quotes_runtime выключается при инициализации системы, поэтому вы не должны вручную удалять слеши при получении данных из базы данных.
Хорошие приемы
Перед приемом любых данных в вашем приложении, являются ли они данными POST из форм, данными COOKIE, URI или XML-RPC, или данные из массива SERVER, вам предлагается простой подход из этих трех шагов:
- Фильтруйте данные так, будто они испорчены.
- Валидируйте данные, чтобы убедиться в том, что они корректного типа, длины, размера и так далее (иногда этот шаг заменяет первый).
- Экранируйте данные перед передачей в базу данных.
CodeIgniter предоставляет следующие функции, помогающие в этом процессе:
Фильтрация XSS
CodeIgniter идет с фильтром Cross Site Scripting. Этот фильтр ищет часто используемые техники для вставки опасного JavaScript в ваши данные, или другие типы кода, которые могут захватить куки или сделать другие опасные вещи. Фильтрация XSS описана тут: Класс Security.
Валидация данных
CodeIgniter имеет класс Form Validation который помогает вам в валидации, фильтрации и предварительной обработке данных.
Экранируйте все данные перед вставкой в базу данных
Никогда не вставляйте информацию в базу данных без экранирования. Пожалуйста, посмотрите раздел, где обсуждаются запросы для дополнительной информации.