GET
またはPOST
メソッドを使用する場合の違いは何ですか?どちらがより安全ですか?それぞれの(不都合な)利点は何ですか?
(同様の質問)
GET
またはPOST
メソッドを使用する場合の違いは何ですか?どちらがより安全ですか?それぞれの(不都合な)利点は何ですか?
(同様の質問)
回答:
セキュリティの問題ではありません。HTTPプロトコルはGETタイプのリクエストをべき等であると定義していますが、POSTには副作用がある場合があります。わかりやすい英語では、GETは変更せずに何かを表示するために使用され、POSTは何かを変更するために使用されることを意味します。たとえば、検索ページではGETを使用し、パスワードを変更するフォームではPOSTを使用する必要があります。
また、PHPは概念を少し混乱させることに注意してください。POSTリクエストは、クエリ文字列からリクエストボディを通じて入力を取得します。GETリクエストは、クエリ文字列から入力を取得するだけです。したがって、POSTリクエストはGETリクエストのスーパーセットです。あなたが使用することができます$_GET
POSTリクエストで、そしてそれも中に同じ名前のパラメータ持つことが意味をなすこと$_POST
と、$_GET
その平均値の異なるものを。
たとえば、記事を編集するためのフォームがあるとします。article-idはクエリ文字列に含まれている可能性があります(したがって、を通じて利用可能です$_GET['id']
)が、article-idを変更するとします。その後、新しいIDがリクエストの本文に存在する場合があります($_POST['id']
)。わかりました、おそらくそれは最良の例ではありませんが、2つの違いを示していると思います。
ユーザーがフォームに情報を入力して[送信]をクリックすると、ブラウザからサーバーに情報を送信する方法が2つあります。URL内、またはHTTPリクエストの本文内です。
前の例で使用されたGETメソッドは、名前と値のペアをURLに追加します。残念ながら、URLの長さは限られているため、この方法はパラメーターが少ない場合にのみ機能します。フォームが多数のパラメーターを使用する場合、またはパラメーターに大量のデータが含まれる場合、URLは切り捨てられる可能性があります。また、URLで渡されるパラメーターはブラウザーのアドレスフィールドに表示されますが、パスワードを表示するのに最適な場所ではありません。
GETメソッドの代替はPOSTメソッドです。このメソッドは、HTTPリクエストの本文内に名前と値のペアをパッケージ化します。これにより、URLがすっきりし、フォームの出力にサイズ制限がなくなります。また、より安全です。
最良の答えは最初の答えでした。
あなたが使用しています:
GET
データの「送信」も完全に可能であるため、あまり正確な答えではありません。
の使用には、2つの一般的な「セキュリティ」の影響がありGET
ます。データはURL文字列に表示されるので、アドレスバー/ URLを覗き込む可能性のある誰かが、セッションを乗っ取るために使用される可能性のあるセッションCookieなど、表示すべきではないものを表示できる可能性があります。誰もがカメラ付き携帯電話を持っていることに注意してください。
のその他のセキュリティへの影響は、リクエストするURLの一部としてほとんどのWebサーバーのアクセスログに記録される変数GET
に関係していGET
ます。状況、規制環境、データの一般的な感度によっては、これが懸念を引き起こす可能性があります。
一部のクライアント/ファイアウォール/ IDSシステムはGET
、過剰な量のデータを含む要求に不快感を与える可能性があり、したがって信頼できない結果を提供する可能性があります。
POST
Webサーバーへのファイルのアップロードに使用されるマルチパートバイナリ入力のサポートなどの高度な機能をサポートします。
POST
送信されるデータのサイズを事前に把握しておく必要があるため、クライアント固有のシングルパスインクリメンタルモードでクライアントリクエストが形成されないようにするため、アプリケーション固有のクライアント実装の複雑さを増す可能性があるcontent-lengthヘッダーが必要です。おそらく、HTTP
RPC(リモートプロシージャコール)トランスポートとして悪用することを選択した人にとっては、軽微な問題です。
他の人は、意味の違いとこの質問の「いつ」の部分をカバーするのにすでに良い仕事をしています。
データが多い場合、または機密情報の一種である場合はPOSTを使用する必要があります(本当に機密性の高いものには安全な接続も必要です)。
すべてのデータがブックマークに含まれているため、人々があなたのページをブックマークできるようにしたい場合は、GETを使用してください。
GETメソッドでREFRESHを押す人に注意してください。ユーザーに警告することなく毎回データが再送信されるためです(POSTはユーザーにデータの再送について警告することがあります)。
このW3Cドキュメントでは、HTTP GETおよびPOSTの使用について説明しています。
信頼できる情報源だと思います。
概要は次のとおりです(ドキュメントのセクション1.3):
- インタラクションが質問に近い場合(つまり、クエリ、読み取り操作、ルックアップなどの安全な操作である場合)は、GETを使用します。
- 次の場合は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
メソッドはブックマークできません
URLからリソースを取得する場合は、GETメソッドを使用します。ブラウザの戻るボタンを押すと常に最後のページが表示され、ブックマークが付けられる可能性があるため、POSTメソッドほど安全ではありません。
URLに何かを「送信」する場合は、POSTメソッドを使用します。たとえば、Googleアカウントを作成し、すべての詳細情報を入力する必要がある場合、「送信」ボタンをクリックし(POSTメソッドはここで呼び出されます)、送信が成功したら、ブラウザの「戻る」ボタンを押してみます、フォームが入力された最後のページではなく、エラーまたは新しい空白のフォームが表示されます。
GET
方法:
256文字の日付の送信にのみ使用されます
この方法を使用すると、ブラウザで情報を確認できます
フォームで使用されるデフォルトの方法です
それほど安全ではありません。
POST
方法:
無制限のデータを送信するために使用されます。
この方法では、ブラウザで情報を見ることができません
POST
メソッドを明示的に述べることができます
GET
メソッドよりも安全です
より高度な機能を提供します