token best practice di sicurezza per l'autenticazione

1

Quindi sto provando qualche autenticazione basata su token in Laravel, ogni utente ha un token che può usare per accedere ad un determinato database. Ma c'è qualcosa che ancora non capisco da questi tutorial. Le esercitazioni sembrano controllare solo se un utente ha token, se sì, quindi autenticare il profilo per eseguire determinate chiamate API, ma ovviamente questo non è sicuro.

Quando diciamo che un utente "Andrew" ha il proprio token e dice che può vedere il proprio profilo (in una tabella "profilo"), può anche vedere il profilo di altre persone purché abbia il proprio token, se riesce a indovinare l'api chiama quell'altro profilo. Diciamo che ha semplicemente visto la chiamata api per il suo profilo example.site/getprofile?id=22 e prova a cambiare l'id per vedere il profilo di altri, e verrà autenticato perché ha token.

Come faccio ad assicurarmi che non possa vedere il profilo di altri? qual è la migliore pratica?

    
posta Rizki Hadiaturrasyid 31.05.2018 - 12:25
fonte

2 risposte

2

Suggerirei quanto segue per il tuo esempio specifico in cui è l'id utente che stai utilizzando per il parametro di query

  • Nel token aggiungi un reclamo userid. (di solito il token avrà già uno di questi in una forma o nell'altra, forse la rivendicazione "sub"?)

  • Crea l'apicall 'getMyProfile' con zero parametri

  • Nel controller leggi i token claim e tira fuori l'userid. usalo per recuperare il profilo degli utenti e restituirlo.

Se è necessario un metodo generale "getProfile", puoi aggiungere anche questo, ma utilizzare le attestazioni dei "ruoli" dei token per limitare l'accesso agli utenti admin (o qualsiasi ruolo richiesto)

    
risposta data 31.05.2018 - 12:31
fonte
2

Sembra che tu abbia autenticazione coperto, ma dovresti anche cercare alcuni tutorial su autorizzazione , che è quello che stai descrivendo.

Essenzialmente, ogni azione sensibile alla sicurezza dovrebbe eseguire una fase di autorizzazione per determinare se è consentita prima che venga effettivamente eseguita. Non sono sicuro delle specifiche di Laravel, ma nel caso della visualizzazione di un profilo utente, ad esempio, l'autorizzazione controllerà che l'ID dell'utente corrente, che dovrebbe essere in qualche modo ottenibile dal loro token, sia lo stesso dell'ID del profilo visualizzato o, eventualmente, se l'utente corrente è un amministratore o super-utente e non consentirà la visualizzazione se questo non è il caso.

Modifica: sembra che Laravel abbia incluso un intero framework di autorizzazione, quindi questa pagina dovrebbe aiutarti a iniziare Soluzione specifica per Laravel.

    
risposta data 31.05.2018 - 14:09
fonte

Leggi altre domande sui tag