Esiste il rischio che gli ID di riga siano visibili agli utenti?

1

In questo articolo, blrfl è un buon caso ( Come progettare un buon numero di ricevuta ) per mantenere le cose semplici. Non codificare le informazioni in numeri: è possibile cercare qualsiasi informazione necessaria. Sono molto favorevole a questo, ma a pensarci ora, ho una domanda leggermente tangenziale.

Se i miei dati hanno tutti i record che ha, e sono tutti semplicemente numerati in sequenza (unsigned int), c'è qualche svantaggio nell'esporre tali informazioni all'interfaccia utente?

In altre parole, se un utente stava guardando il report # 123 e # 123 è in effetti l'ID del record univoco della tabella. È un problema? L'alternativa è che ho un secondo campo, con un ID numerico, per scopi UX. Quindi il Report # 123 non è in effetti l'ID del record effettivo.

Intuitivamente, è meglio offuscare il funzionamento interno, ma è davvero importante? Qualche idea / consiglio?

    
posta Maxcot 27.08.2018 - 02:24
fonte

3 risposte

3

link

The advantage of natural keys is that they exist already, you don't need to introduce a new "unnatural" value to your data schema. However, the disadvantage of natural keys is that because they have business meaning they are effectively coupled to your business: you may need to rework your key when your business requirements change. For example, if your users decide to make CustomerNumber alphanumeric instead of numeric then in addition to updating the schema for the Customer table (which is unavoidable) you would have to change every single table where CustomerNumber is used as a foreign key.

Personalmente ho scoperto che usare le chiavi surrogate è generalmente economico e abbastanza facile e paga quando lo schema deve evolversi.

    
risposta data 27.08.2018 - 08:47
fonte
1

Sì, ci sono un paio di problemi.

  1. L'utente conosce gli ID dei record < l'ID esposto
  2. L'utente può indovinare ID record successivi
  3. L'utente sa che hai > = i record ID esposti.

Ora, quanto male queste cose dipendono dal resto del setup, ma possono essere sottili.

Supponiamo ad esempio che io sia un investitore, effettuo un ordine ogni mese e annoto il numero di identificazione. Ora ho una misura approssimativa delle tue vendite mensili e, vedendo numeri inferiori a quelli previsti, vendo le mie azioni prima del tuo rapporto annuale, quindi le riacquisto immediatamente dopo la loro caduta.

La tua sicurezza potrebbe impedire qualsiasi uso dannoso evidente, ad esempio accedere ai record di altre persone, ma comunque hai effettivamente perso denaro

    
risposta data 27.08.2018 - 13:35
fonte
1

Farò del mio meglio per fare un altro buon caso qui. : -)

Non c'è una risposta concreta; è tutta una questione di valutazione dei rischi. Devi guardare il tuo sistema e capire:

  • Che danno, se esiste, verrà da un utente in grado di indovinare facilmente gli ID dei tuoi record
  • Quali controlli hai in atto per impedire l'accesso laddove non lo desideri
  • Che danno deriverebbe da errori di comunicazione o da errori di informazione (ad esempio, inserendo 156 anziché 159 quando entrambi sono validi)
  • Quali altre informazioni possono essere ricavate osservando l'incremento del numero di sequenza.

Se sei IMDB, gli ID non contano davvero, e il loro è, di fatto, sequenziale. Qualcuno che guarda la voce per Young Frankenstein può cambiare l'ultima cifra nell'ID del titolo e tirare vai alla pagina Zandy's Bride . Non c'è nulla di male nel vedere quei dischi perché praticamente tutto sul sito è contenuto che vogliono vedere, e vedere un'altra pagina significa un'ulteriore opportunità di mettere materiale promozionale davanti ai tuoi occhi. Gli utenti finali possono modificare i record, ma farlo dipende dal superamento di un controllo di accesso. Inserire quello sbagliato significa vedere il film sbagliato, che diventa ovvio perché il titolo è la prima cosa nella pagina recuperata. Probabilmente anche a loro non interessa che tu possa guardare il numero di sequenza per i titoli oggi e tra una settimana e il numero di film che sono stati rilasciati durante quella settimana.

Se sei un sito di e-commerce, è importante. Lasciare che una terza parte che ha ordinato l'ordine 2620453 veda lo stato per l'ordine 2620452 rischia di perdere finanziaria per me o per il mio cliente se diventa evidente che un oggetto di valore verrà consegnato a casa mia al 1010 Disk Drive il martedì e tale informazione è usato per rubarlo mentre sono ancora al lavoro. Quel genere di cose era un problema nei primi giorni dello shopping online. I siti non sviluppati da naif che utilizzano numeri di ordine sequenziali ora richiedono qualcosa che tu sappia dell'ordine come il codice postale ship-to come un secondo fattore per il controllo degli accessi se non richiedono già un accesso completo. Annullare un numero d'ordine errato senza verificare che si tratti del cliente corretto e l'ordine potrebbe rischiare di perdere attività future. E l'ultima cosa che vuoi è che i concorrenti facciano brute-forzando i tuoi numeri di ordine per capire se stanno facendo o meno più o meno affari di te, il che è una buona ragione per una chiave esterna difficile da indovinare.

La tua menzione di UX suggerisce che probabilmente gli ID non saranno gestiti solo dalle macchine, quindi c'è anche la necessità di considerare l'usabilità. Gli UUID di tipo 4 sono ottimi secondi tasti perché sono difficili da indovinare e raramente si scontrano. Metti un umano nel loop cercando di ottenere 32 cifre esadecimali in un dispatcher attraverso un collegamento radio traballante e diventano veramente terribili molto velocemente. Gli ID sequenziali potrebbero essere altrettanto negativi per lo stesso motivo, perché un'estremità potrebbe dire che si trova nel sito three-oh-six , l'altra estremità potrebbe sentire three-eight-six e un il camion viene inviato in un posto valido ma sbagliato. Gli hash brevi, magari con una cifra di controllo, potrebbero essere un'alternativa valida a seconda del numero di record, della tolleranza degli utenti per gli ID più lunghi e dell'importanza di evitare voci errate.

    
risposta data 27.08.2018 - 15:25
fonte

Leggi altre domande sui tag