2013-05-12 21 views
6

Su un sistema basato su REST, quali sono le opzioni per "crittografare" l'ID delle risorse.Sicurezza REST Buona pratica durante l'esposizione delle risorse ID

Per esempio:

/client/2 

sarebbe accessibile a

/client/SOMEHASHKEY 

Sto pensando:

1 - Avere le tabelle DB che registra un ID di risorsa ed è hash corrispondente e cercalo su ogni richiesta Questo ovviamente sembra abbastanza pesante da implementare e aumentare il lavoro del server un po '.

2 - avere un qualche tipo di algoritmo di crittografia interna che avrebbe creato un hash, per esempio in base alla data di creazione delle risorse, l'ID risorse e base64 (ovviamente non ottimali, ma si ottiene il punto)

Quindi sono lì buone pratiche per questo tipo di scenari? Cosa raccomanderesti ?

Molte grazie

risposta

2

Se la vostra intenzione è quella di rendere difficile indovinare gli ID client, quindi utilizzare uuids, ad esempio 32 caratteri esagonale lungo guids come 21EC2020-3AEA-1069-A2DD-08002B30309D.

Le entità di identificazione in un dominio dipendono completamente dall'implementazione che fornisce il servizio REST.

Alcune applicazioni utilizzano i GUID per impostazione predefinita per identificare le entità. Un buon esempio è per esempio il lovefilm API:

GET /users/9D48675C-096F-11DC-BF5A-88D01745CE5C HTTP/1.1 
Host: openapi.lovefilm.com 

Tuttavia, utilizzando identificatori difficile da indovinare non protegge da accessi non autorizzati e non è un sostituto per un vero e proprio meccanismo di autenticazione.

+0

ronzio quindi se prendo la tua risposta e provo ad applicarla alla mia domanda intendi l'uso della tabella per tenere traccia della corrispondenza tra Hash, GUID o qualsiasi altra cosa e la vera risorsa? – silkAdmin

+0

Dipende da come la tua applicazione memorizza la risorsa. Non ho idea di come appare la risorsa all'interno dell'applicazione. Ma sì, se devi attaccare internamente gli ID interi, quindi aggiungi un'altra proprietà guid al tuo modello client. Se lo spazio di archiviazione è una tabella del DB SQL, quindi memorizzare il guid in un campo aggiuntivo della tabella client. – stmllr

+0

così da riportarci alla domanda "buona pratica", immagino che il tuo punto sia che dovrei indicizzare un UUID sulla tabella delle risorse stessa? – silkAdmin

Problemi correlati