Che cosa protegge una JWT dall'essere dirottata e utilizzata per rappresentare l'utente originale?

8

Ci scusiamo per questa domanda forse sciocca, sto solo imparando su JWT quindi ti prego di sopportare me ...

Ho letto estensivamente i documenti del JWT, ma non capisco cosa impedisca a un hacker di dirottare il JWT e di fingersi l'utente per il quale è stato originariamente rilasciato.

Ecco lo scenario di cui sono preoccupato: supponiamo che un cattivo attore sia in qualche modo in grado di fiutare il traffico sulla mia rete aziendale e abbia anche un semplice account sul mio sito. Se è in grado di trovare un utente dipendente con autorizzazioni amministrative o speciali, non può accedere al sito, ricevere il suo cookie SSL, quindi dirottare il JWT del dipendente e porsi come tale utente ora e ottenere tali permessi speciali?

Dato che non controllerò nuovamente le credenziali dell'attore cattivo, solo il loro JWT, mi sembra che il cattivo attore possa inviare il JWT usando il sito SSL attraverso il suo semplice account ...

Quale parte del puzzle mi manca qui? Grazie!

    
posta longboardnode 04.10.2017 - 04:40
fonte

3 risposte

12

JWT è solo un incapsulamento di informazioni in una stringa con la possibilità di crittografare queste informazioni e rilevare la manomissione. JWT da solo non protegge dal furto di cookie o dall'uso improprio fatto con sniffing, XSS, CSRF, estensioni del browser o simili.

Ciò significa che devi ancora utilizzare i metodi usuali per proteggere il token o cookie dall'uso improprio, ad esempio utilizzare cookie solo http per proteggersi contro XSS, utilizzare TLS per proteggere dallo sniffing, utilizzare token CSRF o altre tecniche per proteggere contro CSRF ecc. E potresti includere alcune informazioni nel token protetto che rendono più difficile l'uso improprio, come un'impronta digitale del browser, l'IP di origine dell'utente ecc. Naturalmente è necessario verificare queste informazioni ogni volta che il cookie viene utilizzato per l'autorizzazione.

    
risposta data 04.10.2017 - 06:50
fonte
2

Esiste un rischio considerevole rappresentato da un utente malintenzionato che sniffing traffico di rete e rubare cookie di sessione per impersonare altri utenti. Tuttavia i JWT non sono stati progettati per affrontare questo rischio. Hai SSL / HTTPS per occuparti di questo problema. Una connessione SSL tra il browser e il server Web garantisce riservatezza e sicurezza dei dati durante il trasporto. Se si utilizzano i JWT su una connessione HTTP, non c'è molto che si possa fare per impedire al pirata informatico di annusare il traffico e utilizzare in modo improprio il token.

I JWT sono token autosufficienti che vengono utilizzati per condividere le informazioni di autenticazione tra diversi sistemi. Risolvono il problema di affidarsi a terze parti per la convalida di un token di autenticazione poiché tutte le informazioni necessarie per convalidare il JWT sono contenute nel token stesso. Questo semplifica il processo di on-boarding in un sistema single sign-on in quanto è richiesta un'integrazione minima. I JWT sono anche HTTP friendly poiché sono solo stringhe BASE-64.

Le JWT hanno avuto la loro parte di problemi di sicurezza in passato. leggi altro .

P.S. devi comunque affidarti a terze parti per ottenere le chiavi pubbliche corrette per la convalida del token.

    
risposta data 04.10.2017 - 07:38
fonte
0

Ho anche affrontato questo problema relativo alla sicurezza in passato, ma posso farlo in laravel. semplicissimo crea un middleware e controlla Origin come quello.

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

quindi, se qualcuno ha dirottato il tuo token jwt e poi prova a chiamare la richiesta da un altro server o localhost, il middleware non consente quel tipo di richiesta.

    
risposta data 13.12.2018 - 14:20
fonte

Leggi altre domande sui tag