Ho iniziato ad aggiungere un commento sulla risposta di Hendrik Brummermann, ma ho subito esaurito lo spazio, quindi ...
Non capisco perché l'assenza di protezione CSRF possa influire sulla registrazione di un indirizzo IP. E anche se lo facesse, in assenza di una sessione di gestione, quale rilevanza deve avere un indirizzo IP per gestire l'integrità di una transazione?
Inoltre, al fine di evitare replay, il token avrebbe bisogno di variare tra le transazioni - quindi il server avrebbe bisogno di generare nuovi valori per ogni operazione e ricordarli tra le richieste - implicando una sessione - implicando un cookie!
Ciò che manca nella domanda originale sono i dettagli del modello di minaccia - in particolare in assenza di una sessione, che cosa stai cercando di proteggere?
Supponendo che gli attacchi di replay non siano un grosso problema, puoi semplicemente includere sia un valore casuale (R) che l'hash di quel valore casuale + sale (f (R + X)) come campi nascosti. L'incorporamento di un timestamp in R riduce la finestra per qualsiasi attacco di replay (quando aggiungi il macchinario per controllarlo).
Una soluzione senza stato potrebbe essere implementata utilizzando le informazioni fornite in ogni richiesta, ad es. utilizzando l'agente utente e le intestazioni accept e (diciamo) i primi 16 bit dell'indirizzo IP del client E un segreto salt.
Nota che ho regolarmente sottolineato la stupidità nell'uso delle informazioni sull'indirizzo IP per l'autenticazione - e un indirizzo IP del client può cambiare (ad esempio quando si connettono tramite proxy load-balanced) tuttavia IME, l'unica volta in cui i bit più significativi di il cambiamento dell'indirizzo IP si verifica quando il cliente sta deliberatamente cercando di oscurare la propria identità tramite un servizio come TOR - nel qual caso probabilmente non si vogliono comunque i loro POST.
Esistono altri modi per rendere questo identificatore di utente più esclusivo - ad es. proprietà SSL negoziate , il set di cookie corrente (anche se è vuoto!),
Vedi anche panopticlick per ulteriori discussioni sulle impronte digitali dei clienti - ma tieni presente che è probabile che vi siano molte sovrapposizioni tra utenti che non accettano i cookie e gli utenti che non eseguiranno il javascript.
Ovviamente, qualunque sia il dato di riferimento che usi per il controllo, se vuoi implementarlo tramite Django, dovrai eseguire l'override sia del generatore di token che del correttore (CsrfViewMiddleware).