Sono un programmatore che lavora su un'applicazione in cui l'unica scelta / vs / scadenza era implementare la crittografia simmetrica sui valori dei parametri dell'URL. I dati sono di natura insensibile, ma dovevamo impedire agli agenti di vendita di sbirciare a vicenda. (Le chiavi vengono generate durante la creazione della sessione e sono crittograficamente forti.) Le sessioni dovrebbero terminare frequentemente.
La gerarchia dei ruoli era Manager - > Supervisor - > Agents. Le strutture dati attualmente non spiegano questi ruoli in modo da imporre rigorosamente chi può vedere cosa. Ottenere queste informazioni dal database NON era da nessuna parte vicino alla semplice. (Database ricorsivo.)
So che questa tecnica è in fondo alla lista come difesa dalla manipolazione dei parametri. Quale sarebbe stata una tecnica migliore?
Vincoli:
Il controllo basato sui ruoli non è un'opzione.
[Informazioni aggiuntive] Gli URL creati e inviati al client prima di apportare eventuali modifiche assomigliavano a:
https://www.example.com/agent/?producerId=12345
La superficie della minaccia specifica qui è la manipolazione dei parametri contro? agentId = 12345. Gli ID agente sono assegnati in modo univoco a ciascun agente. Quindi, se l'Agente A vuole esaminare le statistiche dell'Agente B, potrebbe aver inserito agentId = 22222 per esaminare le quotazioni dell'agente e le statistiche di vendita correnti.
Anche in questo caso, il controllo basato sul ruolo non era un'opzione per me: non ero in grado di apportare modifiche al database O al livello di persistenza.
La mia soluzione era usare una chiave di crittografia creata dalla sessione (usando la classe KeyGenerator di Java) e crittografare gli url in uscita inviati al client. Quindi ora l'url ha il seguente aspetto:
https://www.example.com/agent/?producerId=<ciphertext>
Ora, se qualcuno prova agentId = 22222, il server decodifica ciò che pensa è testo cifrato e alla fine creerà una sequenza di caratteri non valida.
(Ciò lascia aperta la possibilità che venga trovato un agentId esistente , ma abbastanza improbabile che sia pertinente per la persona che esegue l'attacco.
Sottolineerò che questa domanda non riguarda la sicurezza ottimale (che sarebbe un controllo basato sui ruoli per garantire l'accesso alle risorse) e sul tentativo di spremere un po 'di sicurezza in un'area grigia.
=============== Aggiornamento ============
La soluzione di crittografia dei parametri qui mi è stata consigliata da uno dei nostri addetti alla sicurezza. Ne ho preso uno da asporto che non avevo considerato su questa soluzione - url infranti - e userò quello così come il problema di manutenzione creato da questa soluzione per discutere del tempo necessario per applicare le regole di accesso in un modo meno stopgap.