Spec-Zone.ru › CodeIgniter 3

Класс Input

Класс Input служит для двух целей:

  1. Предварительная обработка глобальных данных ввода для обеспечения безопасности.
  2. Предоставление вспомогательных методов для получения данных ввода и их предварительной обработки.

Примечание

Этот класс инициализируется системой автоматически, поэтому нет необходимости делать это вручную.

  • Фильтрация ввода
    • Фильтрация безопасности
    • Фильтрация XSS
  • Доступ к данным формы
    • Использование данных POST, GET, COOKIE или SERVER
    • Использование потока php://input
  • Справочник по классу

Фильтрация ввода

Фильтрация безопасности

Метод фильтрации безопасности вызывается автоматически при вызове нового контроллера. Он выполняет следующие действия:

  • Если $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

Класс Input имеет возможность автоматически фильтровать ввод для предотвращения атак типа Cross-site scripting. Если вы хотите, чтобы фильтр запускался автоматически каждый раз при встрече данных POST или COOKIE, вы можете включить его, открыв файл application/config/config.php и установив это:

$config['global_xss_filtering'] = TRUE;

Обратитесь к документации класса Security за информацией о использовании фильтрации 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 Clean
$this->input->input_stream('key', FALSE); // No XSS filter

Примечание

Вы можете использовать method() для того, чтобы узнать, читаете ли вы данные PUT, DELETE или PATCH.

Справочник по классу

class CI_Input
$raw_input_stream

Только для чтения свойство, которое вернёт данные php://input как есть.

Свойство можно читать несколько раз.

post([$index = NULL[, $xss_clean = NULL]])
Параметры:
  • $index (mixed) – Имя параметра POST
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

$_POST если параметры не заданы, иначе значение POST, если найдено, или NULL, если нет

Тип возвращаемого значения:

mixed

Первый параметр содержит имя элемента 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); // returns all POST items with XSS filter
$this->input->post(NULL, FALSE); // returns all POST items without XSS filter

Чтобы вернуть массив нескольких параметров POST, передайте все необходимые ключи в виде массива.

$this->input->post(array('field1', 'field2'));

То же правило применяется здесь: чтобы получить параметры с включённой фильтрацией XSS, установите второй параметр в TRUE.

$this->input->post(array('field1', 'field2'), TRUE);
get([$index = NULL[, $xss_clean = NULL]])
Параметры:
  • $index (mixed) – Имя параметра GET
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

$_GET если параметры не заданы, иначе значение GET, если найдено, или NULL, если нет

Тип возвращаемого значения:

mixed

Этот метод идентичен методу post(), только он извлекает данные GET.

$this->input->get('some_data', TRUE);

Чтобы вернуть массив всех элементов GET, вызовите метод без параметров.

Чтобы вернуть все элементы GET и пропустить их через фильтр XSS, установите первый параметр в NULL, а второй — в TRUE.

$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
$this->input->get(NULL, FALSE); // returns all GET items without XSS filtering

Чтобы вернуть массив нескольких параметров GET, передайте все необходимые ключи в виде массива.

$this->input->get(array('field1', 'field2'));

То же правило применяется здесь: чтобы получить параметры с включённой фильтрацией XSS, установите второй параметр в TRUE.

$this->input->get(array('field1', 'field2'), TRUE);
post_get($index[, $xss_clean = NULL])
Параметры:
  • $index (string) – Имя параметра POST/GET
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

Значение POST/GET, если найдено, иначе NULL

Тип возвращаемого значения:

mixed

Этот метод работает практически так же, как методы post() и get(), только объединён. Он будет искать данные в потоках POST и GET, сначала в POST, а затем в GET:

$this->input->post_get('some_data', TRUE);
get_post($index[, $xss_clean = NULL])
Параметры:
  • $index (string) – Имя параметра GET/POST
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

Значение GET/POST, если найдено, иначе NULL

Тип возвращаемого значения:

mixed

Этот метод работает так же, как post_get(), только он сначала ищет данные GET.

$this->input->get_post(‘some_data’, TRUE);

Примечание

Этот метод раньше работал ТОЧНО так же, как post_get(), но его поведение изменилось в CodeIgniter 3.0.

cookie([$index = NULL[, $xss_clean = NULL]])
Параметры:
  • $index (mixed) – Имя COOKIE
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

$_COOKIE если параметры не заданы, иначе значение COOKIE, если найдено, или NULL, если нет

Тип возвращаемого значения:

mixed

Этот метод идентичен методам post() и get(), только он извлекает данные cookie:

$this->input->cookie('some_cookie');
$this->input->cookie('some_cookie', TRUE); // with XSS filter

Чтобы вернуть массив нескольких значений cookie, передайте все необходимые ключи в виде массива.

$this->input->cookie(array('some_cookie', 'some_cookie2'));

Примечание

В отличие от функции Помощника cookie get_cookie(), этот метод НЕ добавляет префикс вашего заданного значения $config['cookie_prefix'].

server($index[, $xss_clean = NULL])
Параметры:
  • $index (mixed) – Имя значения
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

Значение элемента $_SERVER, если найдено, иначе NULL

Тип возвращаемого значения:

mixed

Этот метод идентичен методам 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 (mixed) – Имя ключа
  • $xss_clean (bool) – Нужно ли применять фильтрацию XSS
Возвращает:

Массив данных потока ввода, если параметры не заданы, иначе указанное значение, если найдено, или NULL, если нет

Тип возвращаемого значения:

mixed

Этот метод идентичен методам get(), post() и cookie(), только он извлекает данные потока php://input.

set_cookie($name = ''[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = NULL[, $httponly = NULL]]]]]]])
Параметры:
  • $name (mixed) – Имя cookie или массив параметров
  • $value (string) – Значение cookie
  • $expire (int) – Время истечения срока действия cookie в секундах
  • $domain (string) – Домен cookie
  • $path (string) – Путь cookie
  • $prefix (string) – Префикс имени cookie
  • $secure (bool) – Передавать ли cookie только через HTTPS
  • $httponly (bool) – Доступна ли cookie только для HTTP-запросов (без JavaScript)
Тип возвращаемого значения:

void

Устанавливает cookie с указанными значениями. Есть два способа передачи информации в этот метод для установки 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);

Примечания

Необходимы только имя и значение. Чтобы удалить cookie, установите срок действия пустым.

Срок действия устанавливается в секундах, которые будут добавлены к текущему времени. Не указывайте время, а указывайте только количество секунд с текущего момента, в течение которого вы хотите, чтобы cookie был валидным. Если срок действия установлен в ноль, cookie будет действовать только до закрытия браузера.

Для cookie на весь сайт, независимо от того, как запрашивается ваш сайт, добавьте ваш URL к домену, начиная с точки, например: .your-domain.com

Путь обычно не нужен, так как метод устанавливает корневой путь.

Префикс необходим только в том случае, если вам нужно избежать коллизий имён с другими cookie с одинаковыми именами для вашего сервера.

Флаги httponly и secure по умолчанию принимают значения ваших настроек $config['cookie_httponly'] и $config['cookie_secure'].

Отдельные параметры

Если вы предпочитаете, вы можете установить 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’)
Возвращает:

ИСТИНА, если адрес корректен, ЛОЖЬ, если нет

Тип возвращаемого значения:

булево

Принимает IP-адрес в качестве входных данных и возвращает ИСТИНА или ЛОЖЬ (булево) в зависимости от того, корректен ли он.

Примечание

Метод $this->input->ip_address() выше автоматически проверяет корректность IP-адреса.

if ( ! $this->input->valid_ip($ip))
{
        echo 'Not Valid';
}
else
{
        echo 'Valid';
}

Принимает необязательный второй строковый параметр ‘ipv4’ или ‘ipv6’, чтобы указать формат IP-адреса. По умолчанию проверяются оба формата.

user_agent([$xss_clean = NULL])
Возвращает:

Строка пользовательского агента или NULL, если не установлена

Параметры:
  • $xss_clean (булево) – Применять ли фильтрацию XSS
Тип возвращаемого значения:

смешанный

Возвращает строку пользовательского агента (веб-браузера), используемого текущим пользователем, или NULL, если она недоступна.

echo $this->input->user_agent();

См. Класс User Agent для методов, которые извлекают информацию из строки пользовательского агента.

request_headers([$xss_clean = FALSE])
Параметры:
  • $xss_clean (булево) – Применять ли фильтрацию XSS
Возвращает:

Массив заголовков HTTP-запроса

Тип возвращаемого значения:

массив

Возвращает массив заголовков HTTP-запроса. Полезно при работе в среде, отличной от 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()
Возвращает: ИСТИНА, если это Ajax-запрос, ЛОЖЬ, если нет
Тип возвращаемого значения: булево

Проверяет, установлен ли заголовок сервера HTTP_X_REQUESTED_WITH, и возвращает boolean ИСТИНА, если он есть, или ЛОЖЬ, если нет.

is_cli_request()
Возвращает: ИСТИНА, если это CLI-запрос, ЛОЖЬ, если нет
Тип возвращаемого значения: булево

Проверяет, запущен ли приложение из командной строки.

Примечание

Этот метод проверяет как имя текущего SAPI PHP, так и определена ли константа STDIN, что обычно является надёжным способом проверки, запущен ли PHP из командной строки.

$this->input->is_cli_request()

Примечание

Этот метод устарел и теперь является просто псевдонимом для функции is_cli().

method([$upper = FALSE])
Параметры:
  • $upper (булево) – Возвращать ли имя метода запроса в верхнем или нижнем регистре
Возвращает:

Метод HTTP-запроса

Тип возвращаемого значения:

строка

Возвращает $_SERVER['REQUEST_METHOD'], с возможностью задать его в верхнем или нижнем регистре.

echo $this->input->method(TRUE); // Outputs: POST
echo $this->input->method(FALSE); // Outputs: post
echo $this->input->method(); // Outputs: post

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/input.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API