Sicurezza di impostare l'accesso al bucket S3 solo da un sito Web specifico

3

Ho letto di impostazione dell'accesso al bucket S3 solo da un determinato sito Web in Amazon Docs. E cito:

Suppose you have a website with domain name (www.example.com or example.com) with links to photos and videos stored in your S3 bucket, examplebucket. By default, all the S3 resources are private, so only the AWS account that created the resources can access them. To allow read access to these objects from your website, you can add a bucket policy that allows s3:GetObject permission with a condition, using the aws:referer key, that the get request must originate from specific webpages.

Questo è esattamente il mio requisito.

Ma questo non mi sembra convincente dal punto di vista della sicurezza. Non è possibile che qualcuno esegua JavaScript dal browser mantenendo aperto il mio sito Web e accedendo a questi oggetti o in qualsiasi altro modo in cui ciò può essere interrotto?

In generale, posso garantire che questi file non saranno accessibili in altro modo se non tramite l'accesso al sito web?

P.S. : Non molto esperto in sicurezza, cerco solo di confermare assolutamente perché intuitivamente sentivo che non era sicuro. Presumo che l'intruso abbia in qualche modo ottenuto l'elenco dei file (nomi chiave assoluti) memorizzati nel mio secchio.

    
posta Amit Tomar 02.09.2016 - 11:16
fonte

1 risposta

4

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.

    
risposta data 02.09.2016 - 15:44
fonte

Leggi altre domande sui tag