L'uso di lunghi token casuali come segreti per fornire l'accesso a un file può fornire una sicurezza efficace. Consiglierei 128+ bit per renderlo veramente al di fuori della portata di ipotesi casuali. Probabilmente potresti farcela con meno bit, specialmente se consideri IP limite basandoti su ipotesi sbagliate. Ad esempio, se avessi un token a 64 bit o 80 bit e un miliardo di tali file e venissi attaccato da una botnet con un milione di indirizzi IP distinti che ognuno potrebbe tentare ogni 10 ipotesi ogni 10 minuti - ad esempio hai bandito un IP per 10 minuti dopo 10 tentativi errati, sarebbero necessari circa 12 giorni (token a 64 bit) o 2300 anni (token a 80 bit) per trovare un singolo file casuale.
Tuttavia, per fare ciò in modo sicuro, è necessario tenere presente alcuni avvertimenti:
- Utilizza HTTPS. Gli intercettatori della rete possono vedere (o alterare segretamente) qualsiasi traffico su HTTP.
- Se il documento ha collegamenti ad altre pagine Web e un utente fa clic sui suddetti collegamenti, il server Web all'altra estremità vedrà generalmente un'intestazione
Referer
HTTP nella richiesta HTTP che fornirà l'URL completo (compresi eventuali segreti; questo è anche se il segreto si trova in un parametro di query come link ) e continuerà a verificarsi se l'utente è in modalità di navigazione privata .
- Probabilmente il token casuale può essere memorizzato nella cronologia del browser del tuo computer (a meno che non esplori in modalità privata e termini la sessione).
- Alcuni motori di ricerca prendono il tuo token casuale e lo indicizzano.
- Il meccanismo per informare l'utente della chiave potrebbe farlo trapelare a terzi. L'email è potenzialmente scambiata in chiaro e se si utilizza un provider di posta elettronica di terze parti la chiave segreta è accessibile agli amministratori di quel provider di posta elettronica. Molti utenti salvano anche la posta elettronica in chiaro sul proprio computer con un disco non crittografato (ad es. Il disco rigido può essere rimosso o qualcuno si avvia in un cd live per leggere il contenuto del disco) o lascia il computer connesso al proprio account di posta elettronica.
Il problema 4 può essere evitato di solito mantenendo un robots.txt
e proibendo una directory.
User-Agent: *
Disallow: /private/
È possibile attenuare i problemi 2 e 3 richiedendo all'utente di richiedere il proprio documento tramite POST HTTP (su HTTPS). Quello è invece di fare clic su un collegamento come:
<a href="https://example.com/private/LfliQdgOAkjs9H0Oi5ZZcw">File</a>
Potresti fare qualcosa di simile a incorporare quanto segue in un'email HTML:
<p> Click the button below to get your file:
<form action="https://example.com/private_file/" method="post">
<input type="hidden" name="token" value="LfliQdgOAkjs9H0Oi5ZZcw">
<input type="submit" value="Get File">
</form>
<p>Or go to https://example.com/private_file/ and cut and paste the token <pre>LfliQdgOAkjs9H0Oi5ZZcw</pre>.
Ciò impedirebbe al segreto di apparire nella cronologia del browser o di ricevere link di referer (poiché l'URL sarebbe semplicemente https://example.com/private_file/
).
In alternativa, puoi consentire i link del modulo https://example.com/private/LfliQdgOAkjs9H0Oi5ZZcw
, ma poi reindirizzare l'utente a un altro URL quando in realtà serve il https://example.com/private/document
privato. Ciò eviterebbe il problema n. 2 con le intestazioni di Referer, ma potrebbe comunque lasciare il link nella cronologia del browser.