Яка різниця при використанні GET
чи POST
методі? Який із них безпечніший? Які (недо) переваги кожного з них?
Яка різниця при використанні GET
чи POST
методі? Який із них безпечніший? Які (недо) переваги кожного з них?
Відповіді:
Це не питання безпеки. У HTTP - протокол визначає GET-типу запитів як є ідемпотентів , в той час як косяки , мають побічні ефекти. У звичайній англійській мові це означає, що GET використовується для перегляду чогось, не змінюючи його, тоді як POST використовується для чогось змінити. Наприклад, сторінка пошуку повинна використовувати GET, тоді як форма, яка змінює ваш пароль, повинна використовувати POST.
Також зауважте, що PHP трохи плутає поняття. Запит POST надходить з рядка запиту та через тіло запиту. GET-запит просто отримує введення з рядка запиту. Таким чином, POST-запит - це набір GET-запиту; Ви можете використовувати $_GET
в запиті POST, і він навіть може мати сенс мати параметри з тим же ім'ям в $_POST
і $_GET
що означають різні речі.
Наприклад, скажімо, у вас є форма для редагування статті. Ідентифікатор статті може бути в рядку запиту (і, таким чином, доступний через $_GET['id']
), але скажімо, що ви хочете змінити id статті. Потім новий ідентифікатор може бути присутнім в тілі запиту ( $_POST['id']
). Гаразд, можливо, це не найкращий приклад, але я сподіваюся, що це ілюструє різницю між ними.
Коли користувач вводить інформацію у форму та натискає Надіслати, є два способи передачі інформації з браузера на сервер: за URL-адресою або в тілі HTTP-запиту.
Метод GET, який використовувався в прикладі раніше, додає пари імен / значень до URL-адреси. На жаль, довжина URL-адреси обмежена, тому цей метод працює лише за наявності лише кількох параметрів. URL-адреса може бути усічена, якщо форма використовує велику кількість параметрів або якщо параметри містять велику кількість даних. Також параметри, передані за URL-адресою, видно в адресному полі браузера, не найкраще місце для відображення пароля.
Альтернативою методу GET є метод POST. Цей метод пакує пари імен / значень всередині тіла HTTP-запиту, що робить більш чистим URL-адресу і не накладає обмежень на розмір у виведенні форм. Це також більш безпечно.
Найкращою відповіддю була перша.
Ви використовуєте:
GET
цілком здатний також "надсилати" дані, тому не дуже точна відповідь.
Є два загальних наслідки для використання "безпеки" GET
. Оскільки дані відображаються в рядку URL-адреси, можливо, хтось, хто переглядає ваше плече в адресному рядку / URL-адресі, може переглядати щось, чого не повинно бути таємним, наприклад, сесійне cookie, яке потенційно може бути використане для викрадення вашого сеансу. Майте на увазі, що у всіх є телефони з камерою.
Інші наслідки безпеки пов'язані з GET
тим, що GET
змінні реєструються в більшості журналів доступу до веб-серверів як частини URL-адреси запиту. Залежно від ситуації, регуляторного клімату та загальної чутливості даних це потенційно може викликати занепокоєння.
Деякі клієнти / брандмауери / системи IDS можуть нахмуритися на GET
запити, що містять надмірну кількість даних, і тому можуть дати недостовірні результати.
POST
підтримує розширені функціональні можливості, такі як підтримка двочастинного двійкового вводу, що використовується для завантаження файлів на веб-сервери.
POST
потрібен заголовок довжини вмісту, який може збільшити складність реалізації конкретної програми для клієнта, оскільки розмір поданих даних повинен бути відомий заздалегідь, запобігаючи формуванню запиту клієнта в виключно однопрохідному інкрементальному режимі. Можливо, незначна проблема для тих, хто вирішив зловживати HTTP
, використовуючи його в якості транспорту RPC (Віддалений виклик процедури).
Інші вже зробили хорошу роботу в висвітленні смислових відмінностей та частини "коли" цього питання.
Я використовую GET , коли я витяг інформації з URL - адреси і POST , коли я посилаю інформацію в вигляді URL.
Ви повинні використовувати POST, якщо є багато даних або делікатна інформація (начебто чутливі речі потребують і безпечного з'єднання).
Використовуйте GET, якщо ви хочете, щоб люди змогли зробити закладку на вашій сторінці, оскільки всі дані включені в закладку.
Будьте обережні, люди, які потрапляють на REFRESH методом GET, тому що дані будуть надсилатися знову щоразу без попередження користувача (POST іноді попереджає користувача про повторне надсилання даних).
Цей документ W3C пояснює використання HTTP GET та POST.
Я думаю, що це авторитетне джерело.
Короткий підсумок (розділ 1.3 документа):
- Використовуйте GET, якщо взаємодія більше нагадує запитання (тобто це безпечна операція, наприклад запит, читання або пошук).
- Використовуйте POST, якщо:
- Взаємодія більше нагадує наказ, або
- Взаємодія змінює стан ресурсу таким чином, як сприймає користувач (наприклад, підписка на послугу) або
- Користувач несе відповідальність за результати взаємодії.
Методи отримання та розміщення не мають нічого спільного з серверною технологією, яку ви використовуєте, вона працює однаково в php, asp.net або ruby. GET і POST є частиною протоколу HTTP. Як відмічено, марка POST є більш захищеною. Форми POST також не кешуються браузером. POST також використовується для передачі великої кількості даних.
Причина використання POST при внесенні змін до даних:
Крім того, не вводите конфіденційну інформацію в рядок запиту (лише опція з GET), оскільки вона відображається в адресному рядку, закладках та журналах сервера.
Сподіваємось, це пояснює, чому люди кажуть, що POST "захищений". Якщо ви передаєте конфіденційні дані, ви повинні використовувати SSL.
GET
і POST
це методи HTTP, які дозволяють досягти подібних цілей
GET
в основному це просто отримання (отримання) даних, A GET
не повинен мати корпус, тому окрім файлів cookie, єдине місце для передачі інформації в URL-адресі та URL-адреси обмежені по довжині, GET
менш безпечне порівняно з POST
тим, що дані, що надсилаються, є частиною URL-адреса
Ніколи не використовуйте GET
для надсилання паролів, кредитної картки чи іншої конфіденційної інформації !, Дані видно всім у URL-адресі, Можуть кешувати дані.
GET
нешкідливий, коли ми перезавантажуємо або передзвонимо кнопку, вона буде позначена книжкою, параметри залишаються в історії браузера, дозволені лише символи ASCII.
POST
може включати будь-що, як-от зберігання чи оновлення даних, замовлення товару чи надсилання електронної пошти. POST
метод має тіло.
POST
метод захищений для передачі конфіденційної та конфіденційної інформації на сервер, він не буде видно в параметрах запиту в URL-адресі, а параметри не зберігаються в історії браузера. Немає обмежень щодо довжини даних. Коли ми перезавантажуємо браузер, він повинен попереджати користувача про те, що дані збираються повторно надсилатись. POST
метод не може бути закладений у закладки
Використовуйте метод GET, якщо ви хочете отримати ресурси з URL. Ви завжди можете побачити останню сторінку, якщо натиснути кнопку "назад" у веб-переглядачі, і її можна зробити на закладках, тому це не так безпечно, як метод POST.
Використовуйте метод POST, якщо ви хочете щось "надіслати" до URL-адреси. Наприклад, ви хочете створити обліковий запис google, і вам може знадобитися заповнити всю детальну інформацію, після натискання кнопки "надіслати" (метод POST називається тут), після успішної подачі, і спробуйте натиснути кнопку назад вашого браузера. , ви отримаєте помилку або нову порожню форму замість останньої сторінки із заповненою формою.
GET
метод:
Він використовується лише для надсилання дати з 256 символами
При використанні цього методу інформацію можна побачити у браузері
Це метод за замовчуванням, який використовується формами
Це не так забезпечено.
POST
метод:
Він використовується для надсилання необмежених даних.
За допомогою цього методу інформацію не можна побачити у браузері
Ви можете чітко згадати про POST
метод
Він більш захищений, ніж GET
метод
Він надає більш вдосконалені функції