POSTリクエストとは異なり、 クエリ文字列 を介して機密データを渡す必要がありますか? クエリ文字列は暗号化されます 、しかし、ショルダーサーフィンなど、クエリ文字列でデータを渡さないようにする他の理由はありますか?
クエリ文字列がユーザーのクリック可能なリンクのターゲットである場合(一部のJavaScriptから使用されるURLではなく)、対応するページが読み込まれると、ブラウザのURLバーに表示されます。次の問題があります。
したがって、クエリ文字列がHTMLページの単純なリンクターゲットである場合、機密データはPOSTフォームの一部として送信される必要がありますnot URLにエンコードされますプログラムによるダウンロード(AJAX方法))の場合、これはそれほど問題にはなりません。
ここでの他の回答に加えて、クエリ文字列はWebサーバーのログファイル、HTTPプロキシにも保存され、SSLがBluecoatなどのSSL監視ツールと組み合わせて使用されている場合でも確認できます。
いいえ、機密データはHTTP "GET"経由で送信しないでください常に「POST」経由で送信する必要があります
編集:
POSTを使用する必要があるもう1つの理由は、GETが CSRF攻撃の影響を受けやすいためです
機密データは次のいずれかに渡される必要があります。
3つの理由:
一般に、クロスサイトリクエストフォージェリ(CSRFはXSRFとも呼ばれます)を防ぐルールは、POSTリクエストに対してのみトリガーされます。GETは、Webサーバーからデータを取得するためのHTTPリクエストメソッドですその他の効果(このページが要求されたことをログファイルに入力するなどの害のないもの以外)POSTは、ユーザーがデータを送信して何らかのアクションを実行するためのプロトコルです(たとえば、Webサイトから何かを注文するなど) ;銀行口座からお金を送金する;パスワードを変更する)これはランダムなCSRFトークンであり、通常、ほとんどのフレームワークでGETリクエストに必要ですが、POSTリクエストではしばしば必要になります。
(そして、Thomas Porninとmakerofthings7がそれぞれ1と2に触れている間、私は両方について言及しました 以前はやや類似した質問で 。)
それが避けられるなら、私はいつもそれを避けます。クエリでデータを渡すために正当なneedがない限り、これは閉じたままにする必要があるもう1つの攻撃面です。ストリング。
また、あなたや将来の開発者がデータを適切にフィルタリング/サニタイズせず、攻撃対象をさらに広く開かない可能性もあります。安全でないアプリでも、誤って挿入を許可した場合、悪意のある攻撃者がXSSおよびXSRFスクリプトをDBに挿入し、機密性の低いアプリを使用して他のユーザーを攻撃するため、安全にプレイするのが最善です。
ショルダーサーフィンは、環境によっては、もう1つの正当な懸念事項です。アプリを可能な場所で使用する場合(ライブラリー、誰かが調べられる小部屋、机が間違った方向を向いているオフィスなど)は、潜在的な懸念事項です。アプリを使用している人が全員、机が向けられている部屋にいて、ショルダーサーフィンが問題にならない場合は、心配する必要はありません。しかし、あなたがそれを確実に知らない場合、そしてそれがalwaysであることを知らない場合、それが心配です。
OWASPに基づくRESTセキュリティチートシート https://owasp.org/www-project-cheat-sheets/cheatsheets/REST_Security_Cheat_Sheet
GETリクエストでは、機密データをHTTPヘッダーで転送する必要があります。