0

重複の可能性:
GET または POST のどちらかが他方よりも安全ですか?
POST と GET の違いは何ですか?

$_GET私の理解では、との違いは$_POST、 を使用$_GETすると、フォームがアドレス バーに何を送信しているかを確認できるということです。

現在、iPhone アプリを作成しており、$_GET の詳細を含む URL が送信されています。ユーザーが使用されている変数を確認したり、推測したりすることはできません。GET を使用してはいけない別の理由はありますか?

URL を介して機密データを送信しているため、ユーザーが URL を表示できない場合に $_GET を使用しても安全かどうかを尋ねています。

また、データは IOS アプリから生成されているため、サーバー上にこのデータを含む Web サイトはありません。

前もって感謝します:-)

4

5 に答える 5

1

GETとPOSTはHTTPのリクエストメソッドであり、PHPで使用されないPUTやDELETEのようなものもあります。POSTまたはGETに固執するセキュリティ引数はありませんが、ベストプラクティスは、データ/情報の取得(検索アクションなど)にGETを使用し、保存するデータ(ユーザー入力など)にPOSTを送信することです。

機密データを送信する場合は、メソッドを要求するのではなく、SSLについて考える必要があります。

于 2013-01-12T08:44:51.477 に答える
1

安全な (つまり、SSL) 接続を介してデータを送信していない場合、両方の要求が仲介者によって傍受される可能性があることは、ここにいる全員が正しいことです。

ただし、覚えておく必要があることの 1 つは、Web サーバーが 2 つを処理する方法です。POST通常、リクエストによって送信されたデータはサーバーによってログに記録されませんが、リクエストはログに記録されますGET。これは、GET データが実際には URL の一部にすぎないためです。PHP がデータをスーパーグローバル配列に便利にソートするため、私たちはそれを別個のデータと考えています。のような生の URL へのリクエストは、http://www.google.comクエリ文字列がなくても GET リクエストです (クライアントで別のプロトコルを特に呼び出さない限り)。

他の GET リクエストと同様に、クエリ文字列を含むリクエストもサーバーのアクセス ログに記録されます。クエリ文字列を介して機密情報を渡す場合は、これらのログや、そのようなデータが記録される可能性のある他の場所を安全に処理する方法についての戦略が必要になります。

于 2013-01-12T09:05:25.560 に答える
0

いいえ、安全ではありません。あなたのウェブサイトは、URLバーが表示されている他のマシンから引き続きアクセスできます。GETまた、操作やリクエストを開始するのにWebブラウザは必要ありません。ブラウザやデータの送信方法に関係なく、誰かがリクエストを変更できるようにするFiddlerPOSTなどのプログラムがあります。

POST代わりにを使用GETすると、攻撃者が悪意のあるデータを送信するのが非常に難しくなり、カジュアルなユーザーがURLを試すのを阻止する可能性がありますが、阻止することはできません。基本的に、クライアントデータは信頼できないため、サーバーで検証する必要があります。機密データを送信する必要がある場合は、を使用する必要がありますHTTPS

不本意から信頼へ

真実である必要がある仮定をする代わりに、あなたは信頼を拡大することを躊躇するべきです。クライアントとサーバーの両方がハッキングされるため、サーバーはクライアントを信頼しないように設計する必要があります。その逆も同様です。信頼することを躊躇することは、区分化に役立ちます。

于 2013-01-12T08:42:24.260 に答える
0

良い質問。パスワードなどのデータが非常に機密性の高いものである場合、ワイヤレスネットワークを盗聴する人々が要求されたWebサイトを傍受する可能性があるという唯一の理由から、$_GETを使用することはお勧めしません。悪意のあるユーザーがhttp://www.wireshark.org/などのツールを使用してネットワーク上のすべてのWebトラフィックを盗聴しているとすると、パスワードやその他の機密情報がURLに表示されるだけです。また、iOSアプリのユーザーがネットワークスニッフィングによってURLを見つけた場合、ユーザー自身が、カスタマイズされたHTTPリクエストを送信することで、自分のブラウザーからデータを変更できます。SSLまたはHTTPSを使用してデータを送信し、ネットワークスニッフィングを(ある程度)回避することを検討してください。

JSONの使用などの代替案を調べることができます:NSURLRequestを使用してHttpリクエストでjsonデータを送信する方法

幸運を

于 2013-01-12T08:42:36.330 に答える
0

SSL を使用している場合でも、機密データの転送に GET を使用しないでください。これは、Web サーバーは通常、GET URL をクエリ文字列 (POST 本文ではなく) と共にアクセス ログ ファイルに記録するためです。この回答この回答、およびこのコメントを参照してください。

以下は、私のテスト Web サーバーで見つかったサンプル ログ レコードです (Apache を使用しています)。

127.0.0.1 - - [10/Jan/2013:14:50:57 +0800] "GET /Web/WebAPI.php?action=login&username=ttt&password=uuu HTTP/1.1" 200 380 "-" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12"
127.0.0.1 - - [10/Jan/2013:14:51:05 +0800] "GET /Web/WebAPI.php?action=logout HTTP/1.1" 200 87 "-" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12"
127.0.0.1 - - [12/Jan/2013:13:26:13 +0800] "GET /Web/WebAPI.php?action=login&username=ttt&password=uuu HTTP/1.1" 200 380 "-" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12"

これで、ユーザーのパスワードがプレーン テキストでサーバーに記録されました。あなたはそれを望んでいませんよね?

于 2013-01-12T09:00:37.167 に答える