GET
またはPOST
メソッドを使用する場合の違いは何ですか? どちらがより安全ですか? それぞれの(欠点)利点は何ですか?
(同様の質問)
それはセキュリティの問題ではありません。HTTPプロトコルでは、GETタイプのリクエストはべき等であると定義されていますが、 POSTには副作用がある可能性があります。平易な英語では、GETは何かを変更せずに表示するために使用され、POSTは何かを変更するために使用されることを意味します。たとえば、検索ページではGETを使用する必要がありますが、パスワードを変更するフォームではPOSTを使用する必要があります。
また、PHPは概念を少し混乱させることに注意してください。POSTリクエストは、クエリ文字列からリクエスト本文を介して入力を取得します。GETリクエストは、クエリ文字列から入力を取得するだけです。したがって、POSTリクエストはGETリクエストのスーパーセットです。POSTリクエストで使用できます。$_GET
また、同じ名前のパラメータを含めることも意味があり、それは異なる意味を持ち$_POST
ます$_GET
。
たとえば、記事を編集するためのフォームがあるとします。article-idはクエリ文字列に含まれている可能性があります(したがって、から利用できます$_GET['id']
)が、article-idを変更するとします。その場合、新しいIDがリクエスト本文($_POST['id']
)に存在する可能性があります。OK、おそらくそれは最良の例ではありませんが、それが2つの違いを示していることを願っています。
ユーザーがフォームに情報を入力して [送信] をクリックすると、ブラウザからサーバーに情報を送信する方法が 2 つあります。URL を使用する方法と、HTTP 要求の本文を使用する方法です。
前の例で使用された GET メソッドは、名前と値のペアを URL に追加します。残念ながら、URL の長さには制限があるため、この方法はパラメーターが少ない場合にのみ機能します。フォームで多数のパラメーターが使用されている場合、またはパラメーターに大量のデータが含まれている場合、URL が切り詰められる可能性があります。また、URL で渡されたパラメーターはブラウザーのアドレス フィールドに表示されますが、パスワードを表示するのに最適な場所ではありません。
GET メソッドの代替は POST メソッドです。このメソッドは、名前と値のペアを HTTP 要求の本文内にパッケージ化します。これにより、よりクリーンな URL が作成され、フォーム出力にサイズ制限が課されなくなります。また、より安全です。
最良の答えは最初のものでした。
あなたが使用している:
を使用することには、2つの一般的な「セキュリティ」の影響がありますGET
。データはURL文字列に表示されるため、アドレスバー/ URLを肩越しに見ている人が、セッションの乗っ取りに使用される可能性のあるセッションCookieなど、知られてはならないものを表示できる可能性があります。誰もがカメラ付き携帯電話を持っていることを覚えておいてください。
のその他のセキュリティへの影響は、要求元URLの一部としてほとんどのWebサーバーアクセスログに記録される変数にGET
関係しています。GET
状況、規制環境、およびデータの一般的な機密性によっては、これが懸念を引き起こす可能性があります。
GET
一部のクライアント/ファイアウォール/IDSシステムは、過剰な量のデータを含む要求に眉をひそめる可能性があるため、信頼性の低い結果を提供する可能性があります。
POST
Webサーバーへのファイルアップロードに使用されるマルチパートバイナリ入力のサポートなどの高度な機能をサポートします。
POST
送信されるデータのサイズを事前に知っておく必要があるため、アプリケーション固有のクライアント実装の複雑さが増す可能性のあるcontent-lengthヘッダーが必要です。これにより、クライアント要求が排他的なシングルパスインクリメンタルモードで形成されなくなります。HTTP
おそらく、 RPC(Remote Procedure Call)トランスポートとして使用して悪用することを選択した人にとっては小さな問題です。
他の人は、この質問の意味の違いと「いつ」の部分をカバーするのにすでに良い仕事をしています。
大量のデータや機密情報がある場合は、POSTを使用する必要があります(本当に機密情報には安全な接続も必要です)。
すべてのデータがブックマークに含まれているため、他のユーザーがページをブックマークできるようにする場合は、GETを使用します。
データはユーザーに警告せずに毎回再送信されるため、GETメソッドでREFRESHを押す人に注意してください(POSTはデータの再送信についてユーザーに警告する場合があります)。
URLから情報を取得する場合は GET を使用し、URL に情報を送信する場合は POSTを使用します。
このW3C ドキュメントでは、HTTP GET および POST の使用について説明しています。
信頼できるソースだと思います。
概要は次のとおりです (ドキュメントのセクション 1.3)。
- 対話が質問に似ている場合 (つまり、クエリ、読み取り操作、ルックアップなどの安全な操作である場合) は、GETを使用します。
- 次の場合は POSTを使用します。
- インタラクションは注文に似ている、または
- 相互作用は、ユーザーが認識する方法でリソースの状態を変更します (たとえば、サービスへのサブスクリプション)、または
- ユーザーは、対話の結果に対して責任を負う必要があります。
データに変更を加えるときにPOSTを使用する理由:
また、機密情報はアドレスバー、ブックマーク、サーバーログに表示されるため、クエリ文字列(GETのオプションのみ)には含めないでください。
うまくいけば、これがPOSTが「安全」であると人々が言う理由を説明します。機密データを送信する場合は、SSLを使用する必要があります。
GET
同様の目標を達成できるPOST
HTTPメソッドです
GET
は基本的にデータを取得 (取得) するためのものです。AGET
には本文が必要ないため、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
メソッドよりも安全です
より高度な機能を提供します