web-dev-qa-db-ja.com

GET vs POST、どちらがより安全ですか?

プログラムでWebアプリケーションのb/w GETPOSTの違いを聞いたことがあります。より安全な好奇心、WebアプリケーションのGETメソッドまたはPOSTメソッドで質問すると、プロトコルの観点からも回答が期待されます(つまり、httpおよびhttps)?

POSTは、いくつかの理由でGETよりも安全です。

GETパラメータはURL経由で渡されます。つまり、パラメーターはサーバーログとブラウザーの履歴に保存されます。 GETを使用すると、サーバーに送信されるデータを変更するのが非常に簡単になります。これは、アドレスバーにあるので操作できるためです。

2つのセキュリティを比較するときの問題は、POSTはカジュアルなユーザーを阻止するかもしれませんが、悪意のあるユーザーを阻止するためには何もしません。偽造するのは非常に簡単ですPOSTリクエスト、そして完全に信頼されるべきではありません。

GETの最大のセキュリティ問題は、エンドユーザーの悪意ではなく、サードパーティがエンドユーザーにリンクを送信することです。 POSTリクエストを強制するリンクをメールで送信することはできませんが、悪意のあるGETリクエストを含むリンクを送信することはできます。IE:

最高の無料映画はここをクリック!

編集:

おそらく、ほとんどのデータにはPOSTを使用する必要があります。他のユーザーと共有する必要があるパラメータ、つまり/viewprofile.php?idに対してはGETを使用するだけです。 = 1234、/ googlemaps.php?lat = xxxxxxx&lon = xxxxxxx

28
David Houde

POSTは、GET(URL)とは別の場所(要求メッセージ本文)に情報を配置するだけです。後者はより多くの情報を公開しているように感じる人もいますが、これはいくつかの点に当てはまります(編集で読んでください)。攻撃者がトラフィックを傍受したい時点から、POSTは、攻撃者にとってもGETと同じくらい難しい/簡単です。

エンドポイントとスタートポイントを離れるときにリクエストが公開されないようにセキュリティが必要な場合は、SSL(https)を使用します。

[〜#〜]編集[〜#〜]

ガンボとラダダダの有効なポイントであるGETリクエストのロギングは、POSTリクエストよりも頻繁に発生する可能性があります。たとえば、ブラウザの履歴で(そのブラウザを他の人と共有している場合)。

つまり、GETリクエストはスクリーンウォッチしている人に公開される可能性があるため、GETリクエストに機密データを含めないようにする必要があります。

7
Lucas Kauffman

@Gumboが言うように、URLはログに記録され、より多くの場所に表示されるため、GETリクエストはPOSTリクエストよりも安全ではありません。多くの人がPOSTリクエストはGETリクエストよりもはるかに安全です。URLで直接データを表示できますが、たとえば、ブラウザリクエストを傍受するプロキシソフトウェアを使用して、誰でも表示および変更できるPOST data 。

もう1つのポイントは、GETとPOST GETはデータベース情報を変更しない操作にのみ使用する必要があるため、要求または読み取りのみを使用するため、どこを使用するかを考える必要があることです。情報とPOSTデータは、データが変更される場合に使用する必要があります。一部のWebスキャナーは、すべてのリンクを自動的にクリックし(通常はGETリクエスト)、ボタンやフォーム(通常はPOSTSリクエスト)ではなく、変更を回避しますデータベースですが、たとえば、リンクの後に削除操作を配置すると、より自動化されたツールによってリンクがより簡単にクリックされるリスクがあります。

明らかに、Webスキャナーはボタンやフォームを「クリック」したり追跡したりすることもできますが、通常は違いがあり、この動作を変更してWebを安全にスパイダーすることができます。

0
kinunt