Класс входных данных
Класс входных данных служит двум целям:
- Предварительная обработка глобальных входных данных для безопасности.
- Предоставление вспомогательных методов для извлечения входных данных и предварительной обработки.
Примечание
Этот класс инициализируется системой автоматически, поэтому нет необходимости вызывать его вручную.
Фильтрация входных данных
Фильтрация ограничений безопасности
Метод фильтрации ограничений безопасности вызывается автоматически при создании нового контроллера. Он делает следующее:
- Если $config['allow_get_array'] - FALSE (по умочанию TRUE), уничтожает глобальный массив GET.
- Уничтожает все глобальные переменные в случае если register_globals включена.
- Фильтрует GET/POST/COOKIE индексы массивов, разрешая только буквы и цифры (и несколько других).
- Обеспечивает XSS (Cross-site Scripting Hacks (межсайтовый скриптинг) ) фильтрацию. Может быть включен глобально или по запросу.
- Стандартизирует символы новой строки в PHP_EOL (\n в Unix-подобных ОС, \r\n под Windows). Это настраивается.
XSS фильтрация
Класс входных данных имеет возможность фильтровать данные автоматически для предотвращения атак с применением межсайтового скриптинга. Если вы хотите, чтобы фильтр запускался автоматически каждый раз, когда он получает POST или COOKIE данные, вы можете активировать его открыв свой application/config/config.php файл и установить:
$config['global_xss_filtering'] = TRUE;
Пожалуйста, обратитесь к документации класса безопасности для получения дополнительных сведений об использовании XSS фильтрация в приложении.
Важно
‘global_xss_filtering’ является УСТАРЕВШЕЙ и сохраняется исключительно для обратной совместимости версий. XSS экранирование должно выполняться на выводе, а не вводе!
Доступ к данным из формы
Использование POST, GET, COOKIE или SERVER данных
CodeIgniter поставляется со вспомогательными методами, которые позволяют выборку POST, GET, COOKIE или SERVER элементов. Главным преимуществом использования предоставленных методов, является не извлечение элемента напрямую ($_POST['something']), а проверка элемента на устанавку и возвращение NULL. Это позволяет удобно использовать данные без необходимости проверки элемента на то что он существует. Другими словами, раньше вы делали что-то вроде этого:
$something = isset($_POST['something']) ? $_POST['something'] : NULL;
Со встроенными методами CodeIgniter, вы можете просто сделать так:
$something = $this->input->post('something');
Основными методами являются:
- $this->input->post()
- $this->input->get()
- $this->input->cookie()
- $this->input->server()
Использование php://input потока
Если вы хотите использовать PUT, DELETE, PATCH или другие экзотические методы запросов, то они могут быть доступны только через специальный входной поток, который можно прочитать только один раз. Это не так просто, как чтение из $_POST массива, потому что он (массив) будет существовать всегда и вы можете с ним работать не беспокоясь, о том что у вас только один запрос на все POST данные.
CodeIgniter позаботился об этом и вы можете считывать данные из php://input потока в любое время, используя $raw_input_stream особенность:
$this->input->raw_input_stream;
Кроме того, если входной поток содержится в $_POST данных, вы можете получить доступ к их значениям, вызывая input_stream() метод:
$this->input->input_stream('key');
Аналогично другим методам, таким как get() и post(), если запрашиваемые данные не найдены, он будет возвращать NULL и вы сможете решить следует ли обрабатывать данные через xss_clean() функцию, передавая булево значение в качестве второго параметра:
$this->input->input_stream('key', TRUE); // XSS чистый
$this->input->input_stream('key', FALSE); // Без XSS фильтрации
Примечание
Вы можете использовать method(), чтобы узнать какие данные вы считываете: PUT, DELETE или PATCH.
Настройки класса
- class CI_Input
- $raw_input_stream
Доступное только для чтения свойство, которое будет возвращать php://input данные как есть.
Свойство может быть прочитано несколько раз.
- post([$index = NULL[, $xss_clean = NULL]])
Параметры: - $index (смешанный) – имя POST параметра
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: $_POST если нет параметров, иначе значение POST если такое есть или NULL если нет
Возвращаемый тип: смешанный
Первый параметр будет содержать POST имя искомого элемента:
$this->input->post('some_data');
Метод возвращает NULL если элемент, который вы пытаетесь получить не существует.
Второй необязательный параметр позволяет обработать данные используя XSS фильтрацию. Он активируется, когда второй параметр имеет булево True или установив $config['global_xss_filtering'] в TRUE.
$this->input->post('some_data', TRUE);
Вернуть массив всех POST элементов вызываемых без параметров.
Чтобы вернуть все POST элементы и обработать их XSS фильтрацией, установите первый параметр NULL при установке второго параметра булево TRUE.
$this->input->post(NULL, TRUE); // Возвращает все POST элементы с XSS фильтрацией $this->input->post(NULL, FALSE); // Возвращает все POST элементы без XSS фильтрации
Вернуть массив из нескольких POST параметров получая все необходимые ключи в виде массива.
$this->input->post(array('field1', 'field2'));
Тоже самое правило применяется и здесь, для загрузки параметров с активированой XSS фильтраией, установите второй папаметр булево TRUE.
$this->input->post(array('field1', 'field2'), TRUE);
- get([$index = NULL[, $xss_clean = NULL]])
Параметры: - $index (смешанный) – Имя GET параметра
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: $_GET если нет параметров, иначе значение GET если такое есть или NULL если нет
Возвращаемый тип: смешанный
Этот метод идентичен post(), отличие только в GET данных.
$this->input->get('some_data', TRUE);
Вернуть массив всех GET элементов вызоваемых без параметров.
Чтобы вернуть все GET элементы и передать их через XSS фильтр установите первый параметр NULL и второй параметр булев TRUE.
$this->input->get(NULL, TRUE); // возвращает все GET элементы с XSS фильтрацией $this->input->get(NULL, FALSE); // возвращает все GET элементы без XSS фильтрации
Вернуть массив из нескольких GET параметров получая все необходимые ключи в виде массива.
$this->input->get(array('field1', 'field2'));
Тоже самое правило применяется и здесь, для загрузки параметров с активированой XSS фильтраией, установите второй папаметр булево TRUE.
$this->input->get(array('field1', 'field2'), TRUE);
- post_get($index[, $xss_clean = NULL])
Параметры: - $index (строка) – Имя POST/GET параметра
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: POST/GET значение если найдено, NULL если нет
Возвращаемый тип: смешанный
Этот метод работает практически так же, как post() и get()только в сочетании. Он будет искать данные в двух потоках POST и GET, сначала в POST затем в GET:
$this->input->post_get('some_data', TRUE);
- get_post($index[, $xss_clean = NULL])
Параметры: - $index (строка) – Имя POST/GET параметра
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: POST/GET значение если найдено, NULL если нет
Возвращаемый тип: смешанный
Этот метод работает так же, как post_get() только сперва он ищет GET данные.
$this->input->get_post(‘some_data’, TRUE);Примечание
Этот метод используется, чтобы действовать в ЧЕТКОМ соответствии с post_get(), но в CodeIgniter 3.0 его поведение изменилось.
Параметры: - $index (смешанный) – Имя COOKIE
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: $_COOKIE если нет параметров, иначе значение COOKIE если такое есть или NULL если нет
Возвращаемый тип: смешанный
Этот метод идентичен post() и get(), только она извлекает данные cookie:
$this->input->cookie('some_cookie'); $this->input->cookie('some_cookie, TRUE); // с XSS фильтрацией
Вернуть массив из нескольких значений cookie получая все необходимые ключи в виде массива.
$this->input->cookie(array('some_cookie', 'some_cookie2'));
Примечание
В отличие от функции хелпера cookie get_cookie(), этот метод не подставляет настроенный вами $config['cookie_prefix'].
- server($index[, $xss_clean = NULL])
Параметры: - $index (смешанный) – Имя значения
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: $_SERVER элемент если найден, NULL если нет
Возвращаемый тип: смешанный
Этот метод идентичен post(), get() и cookie() методам, только он выбирает данные сервера ($_SERVER):
$this->input->server('some_data');
Вернуть массив из нескольких значений $_SERVER получая все необходимые ключи в виде массива.
$this->input->server(array('SERVER_PROTOCOL', 'REQUEST_URI'));
- input_stream([$index = NULL[, $xss_clean = NULL]])
Параметры: - $index (смешанный) – Имя индекса/ключа
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: Массив входного потока, если параметры не указаны, в противном случае указанное значение, если есть или NULL, если нет
Возвращаемый тип: смешанный
Этот метод идентичен get(), post() и cookie(), только он выбирает php://input поток данных.
Параметры: - $name (смешанный) – Имя Cookie или массив параметров
- $value (строка) – Значение Cookie
- $expire (число) – Срок действия Cookie в секундах
- $domain (строка) – Домен Cookie
- $path (строка) – Путь Cookie
- $prefix (строка) – Префикс Cookie имени
- $secure (булево) – Следует ли передавать куки через HTTPS
- $httponly (булево) – Нужно ли создавать cookie только для HTTP запросов (не JavaScript)
Возвращаемый тип: пустота
Задает файл cookie, содержащий значения, которые вы укажите. Существует два способа передачи данных в метод так: метод массива и дискретные параметры:
Array Method
Using this method, an associative array is passed to the first parameter:
$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);
Примечания
Только имя и значение являются обязательными. Чтобы удалить файл cookie оставьте время действия пустым.
Время действия в секундах, которое будет добавлено к текущему времени. Не включает время, просто количество секунд от сейчас, которое вы пожелаете установить для файлов cookie. Если время действия указано как "0", файл cookie будет до тех пор пока открыт браузер.
Для большого сайта независимо от того, как ваш сайт запрашивает cookies, добавьте URL в домен начиная с точки: .your-domain.com
Путь обычно не является необходимым, поскольку метод задает путь к корневому каталогу.
Префикс нужен только чтобы избежать конфликт имен с другими одинаковыми именами файлов cookie вашего сервера.
Безопасное булево значение необходимо только если вы хотите сделать безопасные cookie, установите его в TRUE.
Дискретные параметры
Вы можете установить cookie для передачи данных с использованием индивидуальных параметров:
$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
- ip_address()
Возвращает: IP адрес посетителя или ‘0.0.0.0’ если недействительный Возвращаемый тип: строка Возвращает IP адрес посетителя. Если IP адрес недействительный, метод возвращает ‘0.0.0.0’:
echo $this->input->ip_address();
Важно
Этот метод учитывает $config['proxy_ips'] установки и вернет сообщения HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP, HTTP_X_CLIENT_IP или HTTP_X_CLUSTER_CLIENT_IP адреса допустимые для IP адреса.
- valid_ip($ip[, $which = ''])
Параметры: - $ip (строка) – IP адрес
- $which (строка) – IP протокол (‘ipv4’ или ‘ipv6’)
Возвращает: TRUE если адрес действительный, FALSE если нет
Возвращаемый тип: булево
Принимает IP адрес в качестве входных данных и возвращает TRUE или FALSE (булево) в зависимости от того, является ли оно допустимым или нет.
Примечание
The $this->input->ip_address() метод автоматически проверяет IP адрес.
if ( ! $this->input->valid_ip($ip)) { echo 'Недействительный'; } else { echo 'Действительный'; }
Принимает необязательный второй параметр строки из ‘ipv4’ или ‘ipv6’ чтобы указать IP формат. Проверяет по умолчанию оба формата.
- user_agent([$xss_clean = NULL])
Возвращает: Строка агента пользователя или NULL если нет
Параметры: - $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращаемый тип: смешанный
Возвращает строку агента пользователя (браузера) используемого пользователем или NULL если она не доступен.
echo $this->input->user_agent();
Смотрите класс агенте пользователя для методов извлечения информации из строки агента пользователя.
- request_headers([$xss_clean = FALSE])
Параметры: - $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: Массив HTTP заголовков запроса
Возвращаемый тип: массив
Возвращает массив HTTP заголовков запроса. Полезно, если работаете в non-Apache в среде, где apache_request_headers() не будут поддерживаться.
$headers = $this->input->request_headers();
- get_request_header($index[, $xss_clean = FALSE])
Параметры: - $index (строка) – Имя HTTP заголовка запроса
- $xss_clean (булево) – Следует ли применять XSS фильтрацию
Возвращает: HTTP заголовок запроса или NULL если не найден
Возвращаемый тип: строка
Возвращает один элемент из массив заголовков запроса или NULL если искомого заголовка нет.
$this->input->get_request_header('some-header', TRUE);
- is_ajax_request()
Возвращает: TRUE если это Ajax запрос, FALSE если нет Возвращаемый тип: булево Проверяет был ли установлен заголовок сервера HTTP_X_REQUESTED_WITH, и возвращает булево TRUE если да и FALSE если нет.
- is_cli_request()
Возвращает: TRUE если это CLI запрос, FALSE если нет Возвращаемый тип: булево Проверяет, было ли запущено приложение из командной строки.
Примечание
Этот метод проверяет, PHP SAPI имя и если STDIN константа определена, обычно безотказный способ, то PHP запущен используя командную строку.
$this->input->is_cli_request()
Примечание
Этот метод считается УСТАРЕВШИМ и является псевдонимом для is_cli() функции.
- method([$upper = FALSE])
Параметры: - $upper (булево) – Возвращать имя метода запроса в верхнем или нижнем регистре
Возвращает: HTTP метод запроса
Возвращаемый тип: строка
Возвращает $_SERVER['REQUEST_METHOD'], с возможностью установить его в верхнем или нижнем регистре.
echo $this->input->method(TRUE); // Выводит: POST echo $this->input->method(FALSE); // Выводит: post echo $this->input->method(); // Выводит: post