La tua intuizione è corretta nel modo più importante - questo non è, in alcun senso significativo, "sicuro".
Ma il modo in cui viene sconfitto non è esattamente ciò che si immagina.
Quando si fa clic su un collegamento in una pagina Web o il browser carica un'immagine incorporata in una pagina, il browser si collega al server Web e invia una richiesta. Nella richiesta sono presenti le intestazioni HTTP, includendo una chiamata Referer:
. Anche se non sempre presente (per vari motivi che potrebbero non rientrare nell'ambito di questa risposta), il valore di accompagnamento è l'URL della pagina che stavi guardando - nella stessa scheda del browser - quando il link è stato cliccato o l'immagine è stata caricato.
La creazione di una politica di questo tipo in S3 implementa il controllo dell'accesso in base alla stringa che corrisponde a questo valore, presentato dal browser e quasi completamente privo di qualsiasi valore da una prospettiva di sicurezza.
Quindi Javascript in un'altra scheda mentre la pagina è aperta non è la vera preoccupazione. La preoccupazione è un utente malintenzionato che crea richieste con un'intestazione Referer:
falsificata, facilmente eseguibile con strumenti di test come curl
( curl -v http://example-bucket.s3.amazonaws.com/secret-image.jpg -H 'Referer: http://example.com/good-guy.html'
) o plug-in del browser. Ora il bucket dice "oh, sei sulla pagina Good Guy di example.com? Ecco il file di immagine segreta che hai richiesto."
Quindi con una limitazione così ovvia, a cosa serve veramente questo meccanismo?
Non proteggere i tuoi contenuti.
È, tuttavia, utile per prevenire il collegamento in hotlink diffuso ai tuoi contenuti, incorporando link alle tue risorse in siti di terze parti, che equivalgono al furto della larghezza di banda. Una volta ho incontrato un sito truffa in cui il creatore aveva cercato su google pagine che mostravano immagini di carte regalo. Ha trovato tali immagini su uno dei miei siti, ma non li ha scaricati ... ha incorporato collegamenti alle mie immagini nel suo scammy HTML. Una configurazione che nega sul referer riduce in modo significativo tali fastidi ... ma in quanto è adatta per pochissimo altro.
Con S3, puoi generare al volo URL firmati (supponendo che il tuo sito sia dinamico) e incorporarli nell'html. Questa è forse la soluzione più efficace, dal momento che si specifica il periodo di tempo per il quale l'URL è valido, e questi URL sono immuni da manomissioni fino al punto di non fattibilità computazionale. CloudFront, in combinazione con S3, ti consente di creare cookie firmati che ottengono risultati simili, ma senza la necessità di firmare ogni singolo link in ogni pagina che esegui, ma singoli URL firmati per oggetti con una breve scadenza, utilizzando HTTPS e consegnati tramite HTTPS sono un meccanismo efficace di controllo degli accessi, a differenza dei criteri delle pagine di riferimento.