この馬鹿げた質問でごめんなさい、私はただJWTについて学んでいるだけなので、我慢してください...
私はJWTのドキュメントをよく読んでいますが、ハッカーがJWTをハイジャックして、それが最初に発行されたユーザーを装うことを妨げている原因がわかりません。
私が心配しているシナリオは次のとおりです。悪意のある俳優が何らかの形で企業ネットワークのトラフィックを盗聴でき、サイトに単純なアカウントも持っているとします。管理者または特別な権限を持つ従業員ユーザーを見つけることができた場合、サイトにログインし、SSL Cookieを受け取ってから、従業員のJWTを乗っ取り、そのユーザーになりすましてこれらの特別な権限を取得することはできませんか?
不正なアクターの資格情報を再度チェックすることはないので、彼らのJWTのみです。悪意のあるアクターは、サイトのSSLを使用してJWTをシンプルなアカウントで送信できたようです...
ここでパズルのどの部分が欠けていますか?ありがとうございました!
JWTは情報を文字列にカプセル化したものであり、これらの情報を暗号化して改ざんを検出する機能を備えています。 JWT自体は、スニッフィング、XSS、CSRF、ブラウザー拡張機能などで行われるCookieの盗難や誤用から保護しません。
つまり、通常の方法を使用して、トークンまたはCookieを誤用から保護する必要があります。つまり、HTTP専用Cookieを使用してXSSから保護し、TLSを使用してスニッフィングから保護し、CSRFトークンまたはその他の手法を使用してCSRFから保護します。保護されたトークンに、ブラウザーのフィンガープリント、ユーザーのソースIPなどの誤用を難しくするいくつかの情報を含めることができます。詳細は OWASP:セッションIDを他のユーザープロパティにバインドする を参照してください。もちろん、Cookieが認証に使用されるたびに、これらの情報を確認する必要があります。
攻撃者がネットワークトラフィックを盗聴し、セッションCookieを盗んで他のユーザーになりすますことにより、かなりのリスクがもたらされます。ただし、JWTはこのリスクに対処するように設計されていません。あなたはその問題に対処するためにSSL/HTTPSを持っています。ブラウザとWebサーバー間のSSL接続は、機密性と転送中のデータセキュリティを提供します。 HTTP接続でJWTを使用している場合、攻撃者がトラフィックを傍受してトークンを悪用することを防ぐためにできることはあまりありません。
JWTは、異なるシステム間で認証情報を共有するために使用される自己完結型のトークンです。 JWTの検証に必要なすべての情報がトークン自体に含まれているため、認証トークンの検証をサードパーティに依存するという問題を解決します。これにより、最小限の統合が必要になるため、シングルサインオンシステムでのオンボーディングプロセスが簡素化されます。 JWTは単なるBASE-64文字列であるため、HTTPにも対応しています。
JWTは過去に セキュリティの問題 を共有してきました。 もっと読む 。
追伸トークンの検証に適切な公開鍵を取得するには、サードパーティに依存する必要があります。
私は過去にもこのセキュリティ関連の問題に直面していますが、laravelでそのようにすることができます。ミドルウェアを1つ作成し、Originをそのように確認します。
<?php
namespace App\Http\Middleware;
use Closure;
class CheckOrigin
{
public function handle($request, Closure $next)
{
if($request->header('Origin') != 'http://yourapihost.com') {
return response()->json([
'meta' => [
'message' => 'You are Unauthorize person.',
'status_code' => 401,
'status' => false,
],
],401);
}
return $response;
}
}
そのため、誰かがあなたのjwtトークンをハイジャックし、別のサーバーまたはローカルホストからリクエストを呼び出そうとすると、ミドルウェアはそのようなリクエストを許可しません。
コンテキストを提供するためにジャンプしています。
JWTがハイジャックされ、元のユーザーになりすますのを防ぐのは何ですか?
他の人が述べたように、何もない。 JWT自体はこれに対する保護を提供しません。
通信チャネルが侵害された場合でも保護を提供する認証スキームがあります。これらは signature schemes と呼ばれます。それらはHTTPリクエスト、つまり名前に署名することで機能します。それらは標準がなく複雑で、主にバックエンド通信間で使用されます。