知っている人からの意見を求めたいだけです。私は CSRF の脆弱性を検討していましたが、これは私が知っている最も一般的な方法であると思われます。その方法は、返された html でトークンを作成し、同じ値の Cookie を追加することです。したがって、スクリプトが投稿を行おうとすると、have to guess the token thats embedded in the web page
成功するはずです。
しかし、彼らが特定の Web サイトをターゲットにしている場合、なぜ彼らはスクリプトを使用できないのでしょうか。
- ページで get を呼び出します (スクリプトがアクセスできなくても Cookie は返されます)
- HTML を解析してトークンを取得する
- そのトークンを含む投稿を呼び出します (戻ってきた Cookie が送り返されます)
- ユーザーに気づかれずにフォームを送信した
スクリプトは Cookie の内容を知る必要はありません。Cookie が常に送受信されるという事実を利用しているだけです。
ここで何が欠けていますか?これは不可能ですか?これはよく考えるとかなり怖いと思います。
この行の下は、質問に答えるために読む必要はありません:)
この脆弱性は、認証が現在行われている主な方法である Cookie に基づいて行われるという事実に依存しています。
私が考えることができる別の解決策は、認証をページレベルにすることです。したがって、ログインすると、返された html にそのトークンが含まれます。クリックするすべてのリンクにはそのトークンが含まれているため、Web サーバーが要求を受け取ると、ユーザー/セッションを識別する方法があります。それに関する問題は、それ以外のナビゲーションを使用すると、「認証されていない」(たとえば、URL を入力する) ことになり、おそらく次のようになるため、URL で見栄えがよくないことです。
https://www.example.com/SuperSecretPage/1/123j4123jh12pf12g3g4j2h3g4b2k3jh4h5g55j3h3
しかし、安全性がより重要である場合、きれいな URL が 2 位であることは理解しています。
私は Cookie についてすべてを知っているわけではありませんが、ユーザー エージェントが Cookie にもう少し注意を払っていたらどうでしょうか?
たとえば、送信される Cookie がタブによって異なる場合はどうなるでしょうか。私たちは今ではタブを使ってサーフィンしていますよね?では、Cookie のスコープがタブである場合はどうなるでしょうか。したがって、タブ 1 でバンキング サイトを開き、タブ 2 でサーフィンしている場合、タブ 2 で取得/投稿を呼び出すスクリプトは、タブ 2 で発生した Cookie のみを送信します。
または、Cookie が保存されている場合はどうなりますか / ドメイン。そのため、私が example.com にアクセスしている間、返された Cookie はすべて example.com の Cookie コレクションに入ります。そして、私が www.mybankingsite.com にアクセスすると、すべての Cookie が mybankingsite.com コレクションに入れられます。したがって、example.com にアクセスして get/post を呼び出すスクリプトを実行すると、ユーザー エージェントは example.com Cookie のみを送信します。これは、要求されたドメインの Cookie を送信することとは異なります。たとえば、スクリプトが example.com の Web ページ内で mybankingsite.com の get を呼び出した場合、ユーザー エージェントは mybankingsite.com Cookie を送信しません。
ユーザー エージェントの動作を制御できないことはわかっていますが、可能性を探っているだけです