it-swarm.com.de

Was schützt einen JWT davor, entführt und als ursprünglicher Benutzer ausgegeben zu werden?

Entschuldigung für diese möglicherweise dumme Frage, ich lerne gerade etwas über JWT, also bitte ertrage es mit mir ...

Ich habe die JWT-Dokumente ausführlich gelesen, aber ich verstehe nicht, was einen Hacker daran hindert, das JWT zu entführen und sich als Benutzer auszugeben, für den es ursprünglich ausgestellt wurde.

Hier ist das Szenario, über das ich mir Sorgen mache: Angenommen, ein schlechter Schauspieler kann den Datenverkehr in meinem Unternehmensnetzwerk irgendwie abhören und hat auch ein einfaches Konto auf meiner Website. Wenn er in der Lage ist, einen Mitarbeiter zu finden, der über Administrator- oder Sonderberechtigungen verfügt, kann er sich nicht auf der Website anmelden, sein SSL-Cookie erhalten, dann die JWT des Mitarbeiters entführen und sich jetzt als dieser Benutzer ausgeben und diese Sonderberechtigungen erhalten?

Da ich die Anmeldeinformationen des schlechten Schauspielers nicht noch einmal überprüfen werde, sondern nur deren JWT, scheint es mir, dass der schlechte Schauspieler die JWT über das Site-SSL über sein einfaches Konto einreichen könnte ...

Welchen Teil des Puzzles vermisse ich hier? Vielen Dank!

19
longboardnode

JWT sind nur eine Kapselung von Informationen in eine Zeichenfolge mit der Fähigkeit, diese Informationen zu verschlüsseln und Manipulationen zu erkennen. JWT selbst schützt nicht vor Cookie-Diebstahl oder Missbrauch durch Sniffing, XSS, CSRF, Browser-Erweiterungen oder ähnliches.

Dies bedeutet, dass Sie weiterhin die üblichen Methoden anwenden müssen, um das Token oder Cookie vor Missbrauch zu schützen, dh nur http-Cookies zum Schutz vor XSS verwenden, TLS zum Schutz vor Sniffing verwenden, CSRF-Token oder andere Techniken zum Schutz vor CSRF verwenden usw. Und Sie können einige Informationen in das geschützte Token aufnehmen, die den Missbrauch erschweren, z. B. einen Fingerabdruck des Browsers, die Quell-IP des Benutzers usw. - siehe OWASP: Binden der Sitzungs-ID an andere Benutzereigenschaften . Natürlich müssen Sie diese Informationen jedes Mal überprüfen, wenn das Cookie für die Autorisierung verwendet wird.

19
Steffen Ullrich

Es besteht ein erhebliches Risiko, dass ein Angreifer den Netzwerkverkehr abhört und Sitzungscookies stiehlt, um sich als andere Benutzer auszugeben. JWTs waren jedoch nicht darauf ausgelegt, dieses Risiko anzugehen. Sie haben SSL/HTTPS, um dieses Problem zu beheben. Eine SSL-Verbindung zwischen Ihrem Browser und dem Webserver bietet Vertraulichkeit und Datensicherheit während der Übertragung. Wenn Sie JWTs über eine HTTP-Verbindung verwenden, können Sie nicht viel tun, um zu verhindern, dass der Angreifer Ihren Datenverkehr abhört und das Token missbraucht.

JWT sind autarke Token, mit denen Authentifizierungsinformationen zwischen verschiedenen Systemen ausgetauscht werden. Sie lösen das Problem, sich bei der Validierung eines Authentifizierungstokens auf Dritte zu verlassen, da alle zur Validierung des JWT erforderlichen Informationen im Token selbst enthalten sind. Dies vereinfacht den Onboarding-Prozess in einem Single-Sign-On-System, da nur eine minimale Integration erforderlich ist. JWT sind auch HTTP-freundlich, da es sich nur um BASE-64-Zeichenfolgen handelt.

JWTs hatten in der Vergangenheit ihren Anteil an Sicherheitsproblemen . lesen Sie mehr .

P.S. Sie müssen sich weiterhin auf Dritte verlassen, um die richtigen öffentlichen Schlüssel für die Token-Validierung zu erhalten.

2
Shurmajee

ich bin auch mit diesem sicherheitsrelevanten Problem in der Vergangenheit konfrontiert, aber ich kann das in Laravel tun. simpley mache eine Middleware und überprüfe Origin so.

<?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;
    }
}

wenn also jemand Ihr JWT-Token entführt und dann versucht, eine Anfrage von einem anderen Server oder Localhost aufzurufen, lässt die Middleware diese Art von Anfrage nicht zu.

0
Harsukh Makwana

Ich springe ein, um einen Kontext bereitzustellen.

Was schützt einen JWT davor, entführt und als ursprünglicher Benutzer ausgegeben zu werden?

Wie andere gesagt haben, nichts . JWTs an sich bieten keinen Schutz dagegen.

Es gibt Authentifizierungsschemata, die auch dann Schutz bieten, wenn der Kommunikationskanal beeinträchtigt ist. Diese heißen Signaturschemata . Sie arbeiten, indem sie die HTTP-Anforderungen signieren, daher der Name. Sie sind kompliziert, ohne Standard und werden hauptsächlich zwischen Backend-Kommunikationen verwendet.

0
Daniel Szpisjak