Come impedire agli utenti non autorizzati di accedere a un'immagine sul mio server solo tramite URL?

1

Ho alcune immagini generate dinamicamente sul mio server (di alto valore commerciale), che dovrebbero essere visualizzate solo tramite la nostra app mobile. L'immagine viene semplicemente caricata dall'URL come PNG. Come posso impedire alle persone di accedere alla stessa immagine semplicemente utilizzando l'URL (se lo trovano)?

Potrei usare uno script PHP che richiede un token per servire l'immagine (piuttosto che accedervi direttamente). Ma se qualcuno passa e inverte gli ingegneri sull'app mobile, è possibile trovare anche il token. Potrei provare a nasconderlo molto bene, ma non c'è un'altra soluzione migliore?

    
posta Primož Kralj 21.11.2018 - 08:38
fonte

3 risposte

1

Devi lavorare con quelle immagini come dovrebbe essere per contenuti limitati. Ci sono due punti principali:

  1. Proteggi l'accesso al contenuto (le immagini)
  2. Proteggi il contenuto dalla forza bruta per non consentire all'utente di indovinare il percorso dell'immagine.

Entrambi i punti potrebbero essere coperti con richiesta proxy tramite script php. Il primo punto può essere risolto con il contenuto di autenticazione e protezione con token e ACL (livello di controllo di accesso). Assicurati che le immagini fuori dalla visibilità del server web non accedano direttamente all'immagine. Potrebbe essere utile rinominare l'immagine dopo il caricamento e salvare il nome originale e il nuovo nome nel DB. In questo caso puoi chiamarlo dall'app per nome originale e accedervi con un nuovo nome reale univoco.

    
risposta data 21.11.2018 - 19:21
fonte
1

Una risposta per il titolo della domanda: richiede solo un login e una password e controlla l'autorizzazione dell'utente prima di inviare l'immagine.

Una risposta per il corpo della domanda / commenti: come menzionato da ChatterOne nei commenti, finché c'è un accesso gratuito all'app, non c'è modo di impedire il download da parte di una determinata persona.

Fondamentalmente, vendere / fornire i dati grezzi non è la strada da percorrere. La vendita di un servizio è. Finché stai mantenendo la tua app così com'è, prima o poi perderà i dati. Finché sei in continua evoluzione, offri più analisi basate sui dati, più servizi, più soddisfazione del cliente - i sanguisughe di dati saranno sempre lasciati indietro.

    
risposta data 22.11.2018 - 08:24
fonte
0

Ecco alcune idee.

  1. Tutto deve essere SSL TLS v1.2 +
  2. Avere un login / password sarebbe meglio
  3. Avendo successo nel logging l'utente ottiene un codice random 64 byte o più
  4. La richiesta viene modificata in modo tale che al posto di link hai link random 64 byte o più / file
  5. Il codice scade quando l'utente si disconnette o ha un orario basato su
  6. La base dei tempi è più sicura e l'app può recuperare un nuovo codice ogni 5 minuti
  7. Ogni codice è interno a un indirizzo IP e l'utente deve effettuare nuovamente il login se cambia.
  8. Qualsiasi IP che invia un token a 64 bit falso è bannato. Dì 20 minuti.

Se MITM il cert SSL e il pacchetto hanno scaricato il traffico, potrebbe essere ancora possibile, ma la barra viene aumentata in modo significativo. La firma e il blocco dei certificati rendono questo incredibile difficile.

In questo modo non viene memorizzato alcun codice fisso nell'app. L'utente deve passare attraverso un controllo utente / password per ottenere anche detto codice. Anche se pubblichi il codice sorgente, un nome utente e una password validi non saranno ancora presenti.

Ogni utente e se sono consentiti più accessi per utente ogni istanza ha una chiave diversa. Se hanno un telefono cellulare e un tablet.

Senza un nome utente / password qualsiasi processo può essere decodificato. Il token a 64 bit non può essere facilmente indovinato, ma il processo per ottenere uno potrebbe essere indovinato.

PHP ha un "id di sessione", e puoi collegare simbolicamente l'ID di sessione alla cartella reale internamente. Eliminazione di detta cartella dopo 5 minuti o ecc. Probabilmente è meglio usare una funzione casuale sicura.

    
risposta data 27.11.2018 - 17:48
fonte

Leggi altre domande sui tag