Sto sbagliando alcune idee per archiviare i dati di utilizzo (simili a Google Analytics) per alcuni prodotti Javascript sui quali stiamo lavorando.
Sfortunatamente non sappiamo ancora al 100% quali dati vogliamo archiviare e abbiamo solo un'idea di base delle metriche che vogliamo ricavare da essa.
Il mio pensiero è che fondamentalmente vogliamo archiviare un insieme di coppie chiave-valore raggruppate da un instance_id univoco (potrebbero esserci dei difetti in questa logica :)). Con questo in mente ho buttato giù un prototipo (molto) veloce in monkrb, il cui totale complessivo è sotto:
get "/store" do
key = params[:key]
value = params[:value]
instance_id = params[:instance_id]
Ohm.redis.hset instance_id, key, value
end
Mentre questo dovrebbe funzionare, sono un po 'preoccupato che una mente inquisitrice possa facilmente inquinare i nostri dati con set casuali e valori-chiave, raddoppiati dal fatto che tutto questo verrà chiamato in Javascript, quindi qualsiasi cosa facciamo per proteggere o crittografarlo sarà abbastanza trasparente per chiunque abbia cura di visualizzare la fonte.
Molto dovrebbe essere facilmente filtrato, come il tempo di segnalazione avremo un'idea delle chiavi che ci interessano (e sappiamo quali abbiamo creato) in modo che possiamo semplicemente spazzare tutti i set che contengono chiavi che non ne sappiamo nulla (anche se di nuovo c'è il rischio che siano state aggiunte chiavi aggiuntive a un set altrimenti valido ..)
Seguendo questo percorso ecco le mie domande:
- Quali passi posso fare per rendere il più difficile possibile aggiungere dati completamente falsi? (handshaking, offuscamento, firma, ecc.)
- Che cosa posso fare per provare a rilevare i dati indesiderati? (bonus per un'idea approssimativa su come implementare troppo)
- Che tipo di controlli dovrei avere in atto per impedire a un instance_id esistente di essere indovinato e incasinato? (quindi qualsiasi dato storico non può essere inquinato)
Va notato che questo è per lo più accademico nella fase attuale, poiché so che sei linee di rubino non fanno un'applicazione, sono solo interessato allo scenario e vorrei sentire altri approcci e pensieri su dove uno potrebbe andare con questo.