CodeIgniter 3, Клас вхідних даних
Клас вхідних даних служить двом цілям:
- Попередня обробка глобальних вхідних даних для безпеки.
- Надання допоміжних методів для отримання вхідних даних та попередньої обробки.
Цей клас ініціалізується системою автоматично, тому немає потреби викликати його вручну.
Фільтрування вхідних даних
Фільтрування обмежень безпеки
Метод фільтрації обмежень безпеки викликається автоматично під час створення нового контролера. Він робить таке:
- Якщо $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 файл і встановити:
Будь ласка, зверніться до документації класу безпеки для отримання додаткових відомостей про використання фільтрації XSS в програмі.
'global_xss_filtering' є застарілою і зберігається виключно для зворотної сумісності версій. XSSекранування має виконуватися на виведенні, а не вводі!
Доступ до даних із форми
Використання POST, GET, COOKIE або SERVER даних
CodeIgniter постачається з допоміжними методами, які дозволяють вибірку POST, GET, COOKIE або SERVER елементів. Головною перевагою використання наданих методів є не вилучення елемента безпосередньо ( $_POST['something'] ), а перевірка елемента на встановлення та повернення NULL. Це дозволяє зручно використовувати дані без необхідності перевірки елемента на те, що він існує. Іншими словами, раніше ви робили щось на кшталт цього:
З вбудованими методами CodeIgniter, ви можете зробити так:
Основними методами є:
Використання php://input потоку
Якщо ви хочете використовувати PUT, DELETE, PATCH або інші екзотичні методи запитів, то вони можуть бути доступні лише через спеціальний вхідний потік, який можна прочитати лише один раз. Це не так просто, як читання з $_POST масиву, тому що він (масив) буде існувати завжди і ви можете з ним працювати не турбуючись, про те, що у вас тільки один запит на всі POST дані.
CodeIgniter подбав про це і ви можете зчитувати дані з потокуphp://input в будь-який час, використовуючи $raw_input_stream особливість:
Крім того, якщо вхідний потік міститься в даних $_POST, ви можете отримати доступ до їх значень, викликаючи input_stream() метод:
Аналогічно іншим методам, таким як get() і post() , якщо запитані дані не знайдені, він буде повертати NULL і ви зможете вирішити, чи слід обробляти дані через xss_clean() функцію, передаючи значення булевого в якості другого параметра:
Ви можете використовувати method() , щоб дізнатися які дані визчитуєте: PUT, DELETE чи PATCH.
Налаштування класу
Доступна тільки для читання властивість, яка повертатиме php://input дані як є.
- $index (змішаний) – ім'я POST параметра
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
$_POST якщо немає параметрів, інакше значення POST якщо таке є або NULL якщо немає
Перший параметр буде містити ім'я POST шуканого елемента:
Метод повертає NULL, якщо елемент, який ви намагаєтеся отримати не існує.
Другий необов'язковий параметр дозволяє обробити дані, використовуючи XSS фільтрацію. Він активується, коли другий параметр має Bule True або встановивши $config['global_xss_filtering'] в TRUE.
Повернути масив всіх POST елементів, що викликаються без параметрів.
Щоб повернути всі POST елементи та обробити їх XSS фільтруванням, встановіть перший параметр NULL при встановленні другого параметра TRUE.
Повернути масив з кількох POST параметрів, отримуючи всі необхідні ключі у вигляді масиву.
Те саме правило застосовується і тут, для завантаження параметрів з активованою XSS фільтрацією, встановіть другий папаметр TRUE.
- $index (змішаний) – Ім'я GET параметра
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
$_GET якщо немає параметрів, інакше значення GET якщо таке є чи NULL якщо немає
Цей метод ідентичний post() , відмінність лише у GET даних.
Повернути масив всіх GET елементів, що викликаються без параметрів.
Щоб повернути всі елементи GET і передати їх через XSS фільтр встановіть перший параметр NULL і другий параметр булев TRUE.
Повернути масив з декількох GET параметрів, отримуючи всі необхідні ключі у виглядімасиву.
Те саме правило застосовується і тут, для завантаження параметрів з активованою XSS фільтрацією, встановіть другий папаметр TRUE.
- $index (рядок) – Ім'я POST/GET параметра
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
POST/GET значення якщо знайдено, NULL якщо ні
Цей метод працює практично так само, як post() та get() тільки в поєднанні. Він шукатиме дані у двох потоках POST і GET, спочатку в POST потім у GET:
- $index (рядок) – Ім'я POST/GET параметра
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
POST/GET значення якщо знайдено, NULL якщо ні
Цей метод працює так само, як post_get() тільки спочатку він шукає дані GET.
Цей метод використовується, щоб діяти в ЧЕТКОМУ відповідно до post_get() , але в CodeIgniter 3.0 його поведінка змінилася.
- $index (змішаний) – Ім'я COOKIE
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
$_COOKIE якщо немає параметрів, інакше значення COOKIE якщо таке є або NULL якщо немає
Цей метод ідентичний post() і get() , тільки вона отримує дані cookie:
Повернути масив з кількох значень cookie, отримуючи всі необхідні ключі у вигляді масиву.
На відміну від функції хелпера cookie get_cookie() цей метод не підставляє налаштований вами $config['cookie_prefix'] .
- $index (змішаний) – Ім'я значення
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
$_SERVER елемент якщо знайдено, NULL якщо ні
Цей метод ідентичний post() , get() і cookie() методам, тільки він вибирає дані сервера ( $_SERVER ):
Повернути масив із кількохзначень $_SERVER отримуючи всі необхідні ключі як масиву.
- $index (змішаний) – Ім'я індексу/ключа
- $xss_clean (булеве) – Чи слід застосовувати XSS фільтрацію
Масив вхідного потоку, якщо параметри не вказані, інакше вказане значення, якщо є або NULL, якщо немає
Цей метод ідентичний get() , post() і cookie() тільки він вибирає php://input потік даних.
Задає файл cookie, який містить значення, які ви вкажете. Існує два способи передачі даних у метод так: метод масиву та дискретні параметри:
Array Method
За допомогою цього методу, асоційальний array is passed to the first parameter:
Примітки
Тільки ім'я та значення є обов'язковими. Щоб видалити файл cookie, залиште пустим.
Час діїсекундах, який буде додано до поточного часу. Не включає час, просто кількість секунд від зараз, яку ви захочете встановити для файлів cookie. Якщо час дії вказано як "0", файл cookie буде поки відкритий браузер.
Для великого сайту незалежно від того, як ваш сайт запитує cookies, додайте URL додомен починаючи з точки: .your-domain.com
Шлях зазвичай не є необхідним, оскільки метод задає шлях до кореневого каталогу.
Префікс потрібен лише щоб уникнути конфлікту імен з іншими однаковими іменами файлів cookie вашого сервера.
Безпечне булеве значення необхідно лише якщо ви хочете зробити безпечні cookie, встановіть його у TRUE.
Дискретні параметри
Ви можете встановити cookie для передачі даних за допомогою індивідуальних параметрів: