C'è qualche preoccupazione riguardo all'esposizione alla chiave primaria del database? [duplicare]

6

C'è qualche rischio se, ad esempio, lascio che gli utenti finali conoscano la chiave primaria associata agli utenti nel database?

    
posta PHPst 02.03.2016 - 14:57
fonte

3 risposte

5

Dipende da cosa è la chiave primaria. Se la chiave primaria è l'indirizzo email dell'utente o altre informazioni personali, ovviamente non dovresti mai esporla a nessuno che non sia l'utente. Anche se la chiave primaria fosse il nome utente sotto forma di FirstName.LastName, dovresti essere stanco dell'esposizione. Tipicamente, la chiave primaria sarà o un intero o guid che ha poco significato da solo, e quindi baserò il resto di questa risposta sul caso tipico.

In generale, se l'applicazione è progettata e protetta correttamente, rivelare ID utente senza significato non dovrebbe rappresentare un rischio per la sicurezza. Tuttavia, questo non è vero per tutti i campi chiave primaria nel DB. Ad esempio, supponiamo che esista una tabella di convalida della posta elettronica con un guid che appare in un collegamento che viene inviato via email all'utente. Questi ID monouso non dovrebbero essere resi pubblici perché altrimenti qualcuno potrebbe inviare un indirizzo email falso e comunque validarlo.

Anche altre considerazioni non sono necessariamente legate alla sicurezza. Ad esempio, se si utilizzano ID interi e si dispone di una pagina di profilo pubblico come menzionata da Matthew nel suo commento, allora qualcuno potrebbe scorrere tutti gli utenti e scoprire informazioni che forse non dovrebbero sapere. Gli esempi potrebbero essere i dati demografici della tua base di utenti, o il numero esatto di utenti del tuo sito web, ecc. Nota che questo non sarebbe un problema se utilizzassi i guids casuali per la chiave primaria, o se non esponessi gli utenti pubblici di la chiave primaria.

    
risposta data 02.03.2016 - 16:37
fonte
2

Le informazioni che stai cercando di mantenere riservate sono i record nel database , non le etichette effettive sulle colonne. Penso che sia piuttosto comune usare PK con nomi come " id ", " pid ", " cid " ... quindi nasconderlo potrebbe essere solo un esempio di Security Through Obscurity.

Non è qualcosa che pubblicizzerei ma non farei di tutto per nasconderlo.

    
risposta data 02.03.2016 - 15:09
fonte
1

Come regola generale, la sicurezza di un'applicazione (e del suo back-end) non dovrebbe mai fare affidamento sulla segretezza. Assumi il caso peggiore - dove tutto è noto e la tua linea di difesa è il codice corretto (corretta codifica su se stesso e scelta saggia di algoritmi). I progetti open source sono controllabili da chiunque, incluso (per fare l'esempio che hai citato) la struttura di un database.

La sicurezza dell'oscurità non è una cosa cattiva da solo, ma solo come un livello aggiuntivo che ha i suoi usi (di solito non in pura sicurezza, piuttosto come un strato riflettente per una sorta di attacco con script)

    
risposta data 02.03.2016 - 15:08
fonte

Leggi altre domande sui tag