Download di un file sul mio sito web, con e senza un segreto. Una stanza di miglioramento? [duplicare]

0

Sto provando a creare un semplice sistema di download come parte del mio sito web. C'è qualcosa di insicuro in questo percorso:

 GET https://my_website.com/downloads?file_id=AAA&user_id=BBB&secret=CCC

Dove user_id e codice sono opzionali per i file che possono essere scaricati gratuitamente. Altrimenti, dopo un pagamento, creo un codice / segreto univoco per un utente e gli fornisco un link.

C'è spazio per miglioramenti qui? E ci sono vulnerabilità?

Non è solo un URL casuale

Ci sarà anche "expire_date" associato a ciascun segreto.

    
posta Uji 18.10.2017 - 05:37
fonte

1 risposta

1

Alcuni pensieri:

  1. Gli URL vengono registrati e ricordati ovunque (registri di server e proxy, cronologia del browser, crawler di ricerca, ecc.), quindi, a meno che il collegamento sia molto effimero (di breve durata), dovresti presumere che i collegamenti trapeleranno e potranno essere usato per fornire un lotto di sicurezza. Se si desidera un'autenticazione vera e propria, è necessario impostare un cookie (sicuro) e rifiutare le richieste che non hanno il valore del cookie previsto, o trasmettere i campi segreti in un corpo POST o altrimenti tenere i segreti fuori dall'URL.
  2. Ovviamente, l'ID utente e il segreto devono essere sgraditi. Ciò significa che devono essere lunghi e in modo sicuro casuali. Come regola generale, mirare ad almeno 128 bit di entropia; questo è più di quanto tu ne abbia strettamente bisogno, ma è economico e potrebbe offrire qualche protezione contro le debolezze altrove (anche se potrebbe anche non esserlo).
  3. In realtà non sono sicuro del motivo per cui ti stai preoccupando con un ID utente, qui; a meno che l'ID utente sia un identificatore riutilizzabile che l'utente ottiene valore dall'essere rimasto costante, si può anche solo usare i segreti.
  4. Il file ID , piuttosto che il file nome , implica che in realtà non stai avendo nulla che l'utente fornisce direttamente per costruire un percorso nel tuo file system. Questo è buono, giusto e corretto. Non fatelo, se potete aiutarlo, fornire agli utenti un modo per specificare direttamente i nomi dei file, in quanto ciò rischia di consentire agli utenti di accedere a file a cui non intendevate accedere.
  5. Potresti voler creare un limite di tempo, un limite di utilizzo o un sistema di revoca per i tuoi link segreti. Altrimenti, una volta generato un link, rimarrà valido per sempre anche se si desidera che smetta di funzionare (o che l'utente voglia smettere di funzionare, ad esempio perché si collega a qualcosa di sensibile / privato per l'utente ma qualcuno ha messo le mani su il collegamento).
  6. Se devi elaborare manualmente i pagamenti e generare link, questo non verrà ridimensionato. L'esecuzione automatica è interamente possibile ma richiede molto lavoro per rendere sicura la gestione e la verifica dei pagamenti.
  7. Assicurati di convalidare i parametri in modo sicuro. Controlla gli attacchi di iniezione (ad esempio, SQL injection se stai controllando un database relazionale) e disinfetta i campi se li rifletti nella pagina (per evitare lo scripting cross-site), specialmente se usi i cookies o l'archiviazione locale per nulla.
  8. Gli utenti possono anche caricare file? Se è così, hai un sacco di cose a cui fare attenzione, tutto da impedire agli utenti di caricare contenuti dannosi o illegali per garantire che gli utenti non sovrascrivano file importanti (potenzialmente guadagnando il controllo sul server web) o spendono il server un sacco di risorse che cercano di elaborare un file molto costoso (come una bombe a compressione ).

Sono sicuro che ne avrei ricavato molto di più, ma questo dovrebbe essere sufficiente per iniziare. La sicurezza è difficile. Cercare di rendere semplice il tuo sistema di sicurezza non significa che sia facile farlo bene.

    
risposta data 18.10.2017 - 08:30
fonte

Leggi altre domande sui tag