Usa l'intestazione invece del cookie per i CSRF double submit cookies?

4

I cookie di invio doppio sono vulnerabili all'iniezione di cookie dallo stesso dominio. Cosa succede se utilizzo un'intestazione personalizzata anziché un cookie?

Esempio di richiesta HTTP:

header X-CSRF-PROTECTION = 5a445s66gg54s45a54
POST   X-CSRF-PROTECTION = 5a445s66gg54s45a54, param1=aaa....

Non è più sicuro?

Modifica: ok, ero confuso, grazie ad Anders ora ho un'idea più chiara.

Vorrei evitare di inserire campi di moduli nascosti, ma voglio fornire una protezione decente.

  • Uso sempre l'interazione basata su json ajax

  • Controllo sempre che il tipo di contenuto sia "application / json"

Quindi, ciò che ho proposto prima non aggiunge sicurezza.

Potrei:

  • memorizza al momento del login un token casuale in SESSIONE e come COOKIE

  • ogni richiesta di ajax, dovrebbe leggere il cookie e impostarlo come intestazione della richiesta

  • il server può confrontare l'intestazione con il valore di sessione

A cosa pensi?

    
posta Ivano 27.01.2017 - 13:20
fonte

2 risposte

3

Il motivo per utilizzare il doppio invio (invece di un token di sincronizzazione) è che non si desidera eseguire una ricerca sul server per ogni richiesta. Quindi, fintanto che il valore del cookie corrisponde a quello del parametro di richiesta, la richiesta verrà passata attraverso.

Funziona perché evil.com non può leggere i cookie da example.com (e quindi inviare un parametro di richiesta corrispondente), né impostarli (e quindi impostare entrambi su alcune costanti arbitrarie).

Hai ragione a sottolineare che questo non riesce per i sottodomini. È possibile per evil.example.com per impostare un coockie che verrà utilizzato per example.com , evitando così il test. Quindi, se non ti fidi dei tuoi sottodomini, non usare questa soluzione per la protezione di CSRF!

Ora, la tua proposta risolve il problema? No. In realtà lo rende peggiore. Poiché non è più necessario leggere o modificare alcun valore del cookie, si riduce la possibilità di modificare le intestazioni delle richieste. Quindi questo è come fare semplicemente affidamento su una singola intestazione con un valore costante, ad es. il comunemente usato:

X-Requested-With: XMLHttpRequest

Hai due problemi qui:

  1. Sei ancora vulnerabile a un attacco da evil.example.com poiché un sottodominio può modificare i parametri di richiesta ai suoi genitori usando document.domain .
  2. Potresti anche essere vulnerabile agli attacchi da evil.com poiché ci sono stati più exploit di Flash che ti consentono di impostare le intestazioni per le richieste interdominio.
risposta data 27.01.2017 - 16:43
fonte
0

Non è chiaro cosa stai cercando di realizzare, quindi è difficile fornire informazioni specifiche, ma alcune linee guida di base sulla prevenzione degli attacchi CSRF possono essere trovate su Foglio di cheat di Prevenzione CSRF di OWasp . Speriamo che questo ti aiuti a orientarti verso un percorso efficace verso i tuoi obiettivi di sicurezza.

    
risposta data 27.01.2017 - 17:02
fonte

Leggi altre domande sui tag