Qual è il modo migliore per proteggere le risorse Web quando fornisci l'API come servizio Web?

4

Ecco la condizione: Ho un'API di servizi web che sto pianificando di vendere come servizio. L'output dell'API contiene URI di alcune risorse (ad esempio immagini, video) che dovrebbero essere accessibili a quell'utente utilizzando l'API.

Esporre l'URI così com'è, sembra una cattiva idea dato che possono semplicemente visitare quella risorsa e navigare attraverso.

What I tried?

Selective Passsword che protegge le risorse URI dalla configurazione del server Apache. Ma ciò impedirebbe a ogni client di visualizzare tali risorse.

What others are doing?

Ho appena visto come Facebook stava facendo questo e sembra che abbiano una sorta di URL crittografato per le risorse di immagine.

Di seguito è riportato un esempio tratto da FB di Barack Obama pagina :

https://scontent.fblr1-1.fna.fbcdn.net/v/t1.0-9/14925612_10154300250296749_7922327253356496348_n.png?oh=54935f1f517c995295580b55a9a058a0&oe=5925CCFC

Come posso raggiungere questo livello di sicurezza? quali sono le pratiche standard e come dovrei implementarle? Qualsiasi vantaggio sarebbe apprezzato !!

    
posta Sudip Bhandari 23.02.2017 - 07:46
fonte

5 risposte

0

Chiaramente il problema per me era l'elenco delle directory. Quindi disabilitare l'elenco delle directory risolve il mio problema.

Ecco come farlo:

apri il seguente file:

/etc/apache2/apache2.conf

Trova le seguenti linee

<Directory /var/www/>
# You uncomment the line below to enable the directory listing in Apache
#   Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Allow file access but password protect directory listing

Proteggi con password il tuo contenuto del server Apache

Uno dei miei altri requisiti era che volevo consentire l'accesso ai file se correttamente URLizzato (da api output xml). (Ad esempio, la regola per la protezione della password funzionerà solo per la directory e i file sono accessibili)

L'ho raggiunto aggiungendo la seguente regola:

<Files ?*>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

che dice in modo efficace che è possibile accedere ai file.

Questa è la documentazione dell'elenco di directory apache

    
risposta data 01.03.2017 - 09:47
fonte
3

Normalmente un'API sarà protetta da una chiave API o da un segreto API che viene comunemente inviato nelle intestazioni. Tuttavia, con l'ampia accettazione di OAuth, gli sviluppatori sembrano utilizzare questo metodo, che possono impostare il tempo per l'aggiornamento di un token OAuth che è un modo molto migliore.

Se hai ancora bisogno di una maggiore protezione per la tua API, (quale indovina un po 'di banca o di pagamento), normalmente il client invia una stringa crittografata al server, il server la decodifica, quindi invia la risposta di nuovo in un criptato stringa.

Quindi la persona con la chiave può decifrare solo la stringa.

Quindi, in effetti, puoi unire il metodo segreto API con la crittografia a stringhe API per un metodo più efficace.

    
risposta data 23.02.2017 - 09:15
fonte
1

Quello che descrivi è un caso di uso comune per risorse che sono memorizzate in un database o che sono generate dinamicamente. In tal caso, non esiste un URL permanente per la risorsa, ma solo quelli generati dinamicamente.

In tal caso, quando si ottiene una richiesta valida, l'applicazione legge il file e scrive direttamente il contenuto del file nella risposta che viene inviata al client. Ad esempio, in JavaEE, un servlet elaborerà la richiesta, assicurerà che sia valida, leggerà il file e copierà direttamente il contenuto nel flusso di output Response .

Se hai bisogno di maggiori dettagli su come farlo, puoi provare a chiedere sul sito SO - non dimenticare di mostrare che hai fatto delle ricerche e il mio consiglio è di scrivere prima del codice ...

    
risposta data 23.02.2017 - 11:29
fonte
1

Non mi viene in mente l'idea di navigare attraverso intendi l'elenco di directory o l'accesso ad altri file attraverso quella posizione uri. in questo caso puoi disattivare gli elenchi di directory e altri accessi ai file, facilmente tramite il file apache config o .htaccess o se hai pensato che il tuo uri originale può dare l'idea della tua struttura di progetto puoi riscrivere il tuo url usando mod_rewrite facilmente in un file .htaccess .

    
risposta data 23.02.2017 - 12:17
fonte
1

Se i file che è necessario proteggere sono file statici di grandi dimensioni e si desidera beneficiare di server Web ottimizzati per la pubblicazione di file statici anziché il server delle applicazioni serve i file statici di grandi dimensioni, si consiglia di esaminare X-SendFile / X-Accel-Redirect funzionalità supportate da molti server web popolari.

In breve, queste intestazioni ti consentono di far sì che il tuo server web serva effettivamente i file, ma la tua applicazione autentica la richiesta per decidere se l'accesso è consentito o anche per servire file diversi a utenti diversi. Utilizzando queste intestazioni, è possibile, ad esempio, reindirizzare l'utente a una pagina di errore vietata o alla pagina di autenticazione se l'utente non ha accesso o non è connesso quando tenta di accedere all'URL del file statico. Se l'utente ha effettuato l'accesso ed è autorizzato ad accedere al file, allora tutto ciò che devi fare è impostare l'intestazione in modo che serva il file che desideri venga visualizzato dall'utente e quando il server web elabora la risposta del server delle applicazioni, sostituirà il corpo della risposta con il file indicato dall'intestazione.

    
risposta data 23.02.2017 - 14:02
fonte

Leggi altre domande sui tag