Класс Input
Класс Input обслуживает две цели:
- Предварительно обрабатывает входные данные в целях безопасности.
- Предоставляет некоторые вспомогательные функции для получения входных данных и их предварительной обработки.
Примечание: Этот класс автоматически инициализируется системой, нет нужды делать это вручную.
Фильтрация для безопасности
Функция фильтрации для безопасности вызывается автоматически, когда вызывается новый контроллер. Это дает следующее:
- Уничтожается глобальный массив GET. Так как CodeIgniter не использует строки GET, нет нужды разрешать их.
- Уничтожает все глобальные переменные в случае, если включена опция register_globals.
- Фильтрует ключи массивов POST/COOKIE, допуская только алфавитно-числовые символы, и некоторые другие.
- Обеспечивает фильтрацию XSS (Cross-site Scripting Hacks). Эта опция может быть включена глобально, или по запросу.
- Устанавливает все символы новой строки в \n
Фильтрация XSS
Класс Input имеет способность автоматически предотвращать атаки cross-site scripting. Если вы хотите, чтобы фильтрация происходила постоянно, вы можете включить эту опцию глобально. Откройте application/config/config.php и установите :
$config['global_xss_filtering'] = TRUE;
Посмотрите документацию к классу Security для информации об использовании фильтрации XSS в вашем приложении.
Использование данных POST, COOKIE и SERVER
CodeIgniter поставляется с тремя вспомогательными функциями, позволяющими получать элементы POST, COOKIE и SERVER. Главное преимущество использования этих функций, в отличие от получения элементов напрямую ($_POST['something']) состоит в том, что оно возвращает булево FALSE, если элемент недоступен. Это позволяет создавать удобные логические конструкции. Если элемент существует, функция вернет его. Иначе говоря, обычно вы делали так:
if ( ! isset($_POST['something']))
{
$something = FALSE;
}
else
{
$something = $_POST['something'];
}
Со встроенными функциями CodeIgniter's теперь вы можете делать просто так:
$something = $this->input->post('something');
Эти три функции:
- $this->input->post()
- $this->input->cookie()
- $this->input->server()
$this->input->post()
Первый параметр содержит имя элемента POST, который вы ищете:
$this->input->post('some_data');
Эта функция вернет булево FALSE, если элемент не существует.
Второй параметр позволяет пропустить данные через фильтр XSS. Для этого просто укажите TRUE:
$this->input->post('some_data', TRUE);
$this->input->get()
Эта фунция идентична функции post, только она позволяет получать данные GET
$this->input->get('some_data', TRUE);
$this->input->get_post()
Эта функция будет искать параметр в POST, а потом в GET:
$this->input->get_post('some_data', TRUE);
$this->input->cookie()
Эта функция идентична функции post, только она ищет данные cookie:
$this->input->cookie('some_data', TRUE);
$this->input->server()
эта функция идентична функциям выше, только она позволяет получить серверные данные ($_SERVER):
$this->input->server('some_data');
$this->input->set_cookie()
Установка cookie со значением, которое вы укажете. Есть два пути передать информацию в эту функцию: массивом или раздельными параметрами:
Использование массива
Ассоциативный массив передается в первом параметре:
$cookie = array(
'name' => 'The Cookie Name',
'value' => 'The Value',
'expire' => '86500',
'domain' => '.some-domain.com',
'path' => '/',
'prefix' => 'myprefix_',
);
$this->input->set_cookie($cookie);
Примечания:
Требуется только имя и значения. Для того, чтобы удалить cookie, установите это с пустым expiration.
Время жизни expiration устанавливается в секундах. Указывается количество секунд, которое должна прожить cookie. Если установлено в ноль, cookie будет существовать, только пока открыто окно браузера.
Для создания независимой cookie, добавьте ваш URL в domain, начиная с точки, например так: .domain.com
Путь, как правило, не требуется, поскольку функция устанавливает корневой путь.
Если вы хотите избежать коллизий имен, необходим префикс.
Раздельные параметры
Если вы предпочитаете, можете устанавливать cookie для передачи данных, используя индивидуальные параметры:
$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix);
$this->input->get_cookie()
Позволяет вам получить cookie. Первый параметр содержит имя cookie, (включая любые префиксы):
get_cookie('some_cookie');
Функция возвращает FALSE, если запрошенный элемент недоступен.
Второй опциональный параметр позволяет вам запустить проверку данных через фильтр XSS. Для этого передайте во второй параметр TRUE:
get_cookie('some_cookie', TRUE);
$this->input->ip_address()
Возвращает IP-адрес текущего пользователя. Если IP-адрес некорректный, функция вернет 0.0.0.0
echo $this->input->ip_address();
$this->input->valid_ip($ip)
Вернет TRUE или FALSE (булево), если указанный $ip корректный или нет. Примечание: Функция $this->input->ip_address() выше проверяет IP автоматически.
if ( ! $this->input->valid_ip($ip))
{
echo 'Not Valid';
}
else
{
echo 'Valid';
}
$this->input->user_agent()
Возвращает user agent (браузер), который использует текущий пользователь. Вернет FALSE, если недоступно.
echo $this->input->user_agent();
$this->input->request_headers()
Полезно при работе в не-Apache окружении, где apache_request_headers() не поддерживается. Вернет массив с заголовками.
$headers = $this->input->request_headers();
$this->input->get_request_header();
Возвращает единственный заголовок.
$this->input->get_request_header('some-header', TRUE);
$this->input->is_ajax_request()
Проверяет, был ли отправлен заголовок HTTP_X_REQUESTED_WITH, и возвращает TRUE или FALSE.
$this->input->is_ajax_request()