Класс Input (ввод)
Класс Input выполняет две задачи:
- Препроцессинг глобальных данных ввода в целях безопасности;
- Предоставляет некоторые функции-помощники для получения данных ввода и их препроцессинга.
Примечание: Этот класс инициализируется системой автоматически, поэтому нет нужды делать это вручную.
Фильтрация безопасности
Функция фильтрации безопасности вызывается автоматически при загрузке нового контроллера. Она делает следующее:
- Если параметр $config['allow_get_array'] установлен в FALSE (по умолчанию TRUE), уничтожает глобальный массив GET.
- Удаляет все глобальные переменные в случае, если включено register_globals.
- Фильтрует массивы GET/POST/COOKIE, допуская только алфавитно-числовые (и некоторые другие) символы.
- Предоставляет XSS-фильтрацию (Cross-site Scripting Hacks). Эта опция может быть включена глобально, или только на один запрос.
- Стандартизирует окончания строк в \n (в Windows \r\n)
XSS-фильтрация
Класс Input имеет способность автоматически фильтровать данные с ввода для предотвращения XSS-атак. Если вы хотите, чтобы фильтр запускался автоматически при каждом запросе, откройте ваш файл application/config/config.php и установите следующее:
$config['global_xss_filtering'] = TRUE;
Пожалуйста посмотрите документацию класса Security для получения дополнительной информации об использовании XSS-фильтрации в вашем приложении.
Использование данных POST, COOKIE и SERVER
CodeIgniter имеет три функции-помощника, которые позволяют вам получать данные POST, COOKIE и SERVER. Основное преимущество использования функций, вместо того, чтобы получать данные напрямую ($_POST['parameter']) состоит в том, что функции проверяют их существование, и в соответствии с этим возвращают FALSE или данные. Это позволяет вам более удобно использовать данные без ручной проверки их существования. Другими словами, обычно вы можете делать так:
if ( ! isset($_POST['something']))
{
$something = FALSE;
}
else
{
$something = $_POST['something'];
}
Со встроенными функциями CodeIgniter вы можете делать просто так:
$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);
Чтобы получить массив всех элементов POST, вызовите эту функцию без параметров.
Чтобы получить все элементы POST и пропустить их через фильтр XSS, установите первый параметр в NULL и второй параметр в TRUE.
Эта функция вернет булево FALSE, если массив POST пустой.
$this->input->post(NULL, TRUE); // возвращает все элементы POST, пропустив их через фильтр XSS
$this->input->post(); // возвращает все элементы POST без XSS-фильтрации
$this->input->get()
Эта функция идентична функции выше, только она отдает данные GET:
$this->input->get('some_data', TRUE);
Чтобы получить массив всех элементов GET, вызовите эту функцию без параметров.
Чтобы получить все элементы GET и пропустить их через фильтр XSS, установите первый параметр в NULL и второй параметр в TRUE.
Эта функция вернет булево FALSE, если массив GET пустой.
$this->input->get(NULL, TRUE); // вернет все элементы GET, пропустив их через фильтр XSS
$this->input->get(); // вернет все элементы GET без XSS-фильтрации
$this->input->get_post()
Эта функция вернет оба потока данных, из 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()
Эта фунция идентична функциям выше, только она получает серверные данные:
$this->input->server('some_data');
$this->input->set_cookie()
Устанавливает куки, содержащие указанные значения. Есть два способа передать информацию в эту функцию, чтобы установить куки: массивом и раздельно указав параметры:
Использование массива
Используя этот метод, передайте ассоциативный массив в первом параметре:
$cookie = array(
'name' => 'The Cookie Name',
'value' => 'The Value',
'expire' => '86500',
'domain' => '.some-domain.com',
'path' => '/',
'prefix' => 'myprefix_',
'secure' => TRUE
);
$this->input->set_cookie($cookie);
Примечания:
Требуются только имя и значение. Чтобы удалить куку, оставьте время истечения пустым.
Время истечения устанавливается в секундах, которые будут добавлены к текущему времени. Не включайте время, только количество секунду от текущего момента, которые кука должна быть валидной. Если время истечения установить в ноль, кука будет действительна только пока открыт браузер.
Для межсайтовых кук, несмотря на то, с какого сайта вы их запрашиваете, добавьте ваш URL, начинающийся с точки в domain: .your-domain.com
Путь, как правило, можно не указывать, так как функция сама устанавливает корневой путь.
Префикс требуется только для того, чтобы предотвратить конфликты имен с другими идентичными именами кук на вашем сервере.
Установите параметр secure в TRUE, чтобы сделать безопасную куку.
Раздельно переданные параметры
Если вы предпочитаете, можете установить куки, передав данные в функцию отдельными параметрами:
$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
$this->input->cookie()
Позволяет вам получить куки. Первый параметр содержит только имя куки, которую вы ищете (включая любые префиксы):
cookie('some_cookie');
Функция вернет FALSE, если элемент, который вы хотите получить, не доступен.
Второй опциональный параметр позволит вам пропустить данные через фильтр XSS. Он включается установкой значения в TRUE.
cookie('some_cookie', TRUE);
$this->input->ip_address()
Вернет IP-адрес текущего пользователя. Если IP-адрес неправильный, функция вернет 0.0.0.0
echo $this->input->ip_address();
$this->input->valid_ip($ip)
Принимает IP-адрес на вход, и возвращает TRUE или FALSE, если он правильный или нет. Принимает опциональный второй строковый параметр "IPv4" или "IPv6" для указания формата 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();
Смотрите также методы класса User Agent, которые позволяют извлечь информацию их строки User Agent.
$this->input->request_headers()
Полезно при запуске в не-Апач окружении, где 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_cli_request()
Проверяет установленную константу STDIN, которая дает понять, что PHP вызван из командной строки.
$this->input->is_cli_request()