Invio del nome del database nelle intestazioni delle richieste

0

Sto facendo un progetto con un'architettura di singolo server e database multipli. Ogni richiesta del cliente conterrà un'intestazione contenente il nome del database che questa richiesta dovrebbe collegare. È una buona idea divulgare il nome del database? È un problema di sicurezza?

    
posta Anooj Krishnan G 27.04.2015 - 12:40
fonte

3 risposte

8

Questa non è una buona idea. Un utente malintenzionato potrebbe modificare il nome del database, fornire uno non valido o inserire caratteri speciali sul nome del database e possibilmente sfruttare un'iniezione SQL. È possibile fare molti danni a seconda della configurazione.

È possibile utilizzare sessioni sul lato server e inviare solo il token di sessione all'utente. Il database a cui si sta connettendo deve essere archiviato nella sessione lato server.

    
risposta data 27.04.2015 - 15:20
fonte
7

È un problema di sicurezza e manomettere le intestazioni o, in realtà, tutto ciò che si ha sul lato client è molto semplice. Non dovresti mai fidarti di nulla che provenga dal cliente.

Suggerirei definitivamente di avere una lista bianca di valori accettabili che viene applicata sul lato server per evitare iniezioni SQL. Questo elenco potrebbe essere generato dinamicamente, ma assicurati di non utilizzare mai e poi mai qualcosa che proviene dal client in una stringa di connessione al database o in una query costruita dinamicamente.

Come altri hanno suggerito, il nome del database dovrebbe essere memorizzato sul lato server, in un token di sessione, e non inviato attraverso le intestazioni HTTP.

OWASP ha un sacco di buone informazioni sul tema delle iniezioni SQL. Vedi link

    
risposta data 27.04.2015 - 15:24
fonte
2

Se tutto quello che stai passando è un semplice nome che identifica un database da utilizzare, quindi non riesco a vedere alcun problema immediato (a condizione che tu faccia qualche convalida sul lato server).

Cercherò di evitare l'uso di nomi che forniscono maggiori informazioni sul database del necessario (ad esempio indirizzi di server, informazioni di sistema o di versione, ecc.). In effetti, potrebbe essere preferibile utilizzare solo un ID numerico o qualcosa di simile per identificare i server. Mappalo agli attuali database sul tuo server, dove le probabilità che qualcuno veda queste informazioni è minore. Meno informazioni un cliente deve sapere, meglio è!

Inoltre, dovresti verificare il diritto di un utente di accedere a qualsiasi DB specificato. Se una richiesta da un client viene manipolata per tentare di accedere ad un DB diverso da quello che dovrebbe, allora la logica sul lato server dovrebbe cancellare la richiesta, o almeno verificare che l'utente sia effettivamente autorizzato ad accedere a questo altro database .

    
risposta data 27.04.2015 - 15:18
fonte

Leggi altre domande sui tag