2012-10-16 14 views
7

Sto attraversando un periodo difficile per capirlo. Ho trascorso circa 4 ore a gattonare il web senza post SO per salvarmi.come aggiornare in modo sicuro un database remoto all'interno di un'estensione di Chrome?

immaginare uno scenario:

  1. ho già scritto un'estensione Chrome, che cattura alcune azioni particolari sulla pagina web (soprattutto pulsante di uno scatto). Questa azione attiva una funzione che cattura le informazioni dell'utente e le informazioni sui pulsanti (tutte presenti sulla pagina stessa) e la visualizza

  2. Ora voglio che il plugin sia in grado di aggiornarlo in una configurazione di database su un telecomando server.

Dato che io sono fluente in PHP (e quindi MySQL è una buona scelta), sto cercando una soluzione per fare in modo che gli aggiornamenti sono resi solo e soltanto dall'estensione stessa.

Per questo penso che l'opzione migliore sarebbe quella di eseguire una richiesta GET/POST qualcosa come http://remoteserver.tld/update-db.php?id=XXXX&action=YYYYY&foo=bar .... ecc. Ma cosa succede se l'utente apre/passa post vars a questo URL al di fuori del plugin?

I dati verranno comunque aggiornati e l'integrità andrà persa!

La prossima idea migliore era includere le chiavi con richiesta, ma di nuovo le estensioni sono scritte in JS, quasi chiunque può annusare le chiavi.

Guida al metodo migliore per aggiornare il database sul server remoto e verificare che l'azione sia autenticata.

Cheers!

+5

chiunque può annusare i tasti e chiunque può annusare l'estensione sta facendo. la perfetta sicurezza è essenzialmente impossibile. scegli un livello di rischio con cui sei disposto a lavorare e proteggi le cose fino a quel momento, non più lontano –

+0

Questo è vero ... ma ci sarebbe un modo che potrei sul server, controllare che la richiesta di aggiornamento il database proviene dal plug-in o proviene da una pagina falsificata? ... quali opzioni pensi che abbia @MarcB? ... quale sarebbe stata la tua opinione in questo? ... ricorda che deve essere altrettanto veloce possibile ... perché ci saranno 100 utenti che lavorano sulla rete intranet che aggiorna un host ... – whizzzkid

+0

diciamo che sto lavorando per uno dei pionieri della tecnologia e ho bisogno di un metodo solido per proteggere i falsi su questi dati ... perché Credo che i nerd qui proveranno e modificheranno questi dati al loro meglio ... grazie per le tue idee @MarcB – whizzzkid

risposta

2

Il problema qui è fondamentalmente l'autenticazione, si desidera impedire che chiunque sia in grado di aggiornare chiunque altro archivio dati.

La correzione più evidente per questo è inviare un parametro aggiuntivo che è difficile enumerare (gli hash sono un buon esempio) e che è assegnato a una sola istanza della tua estensione (quindi ogni utente genera il proprio hash di autenticazione) .

Perché questo hash sia efficace, è importante che non sia ipotetico. Non creare l'hash esclusivamente in base a elementi statici come le stringhe di indirizzo IP o di agente utente.

È possibile includere queste stringhe statiche per rendere meno probabili le collisioni: [pseudo] sha1 (indirizzo_ip + utente_agente + oggetto_secondo).

Quindi, in pratica per voi questo finisce nella seguente: lasciare che l'estensione di generare un hash per l'istanza corrente se viene eseguito per la prima volta, fare una richiesta iniziale al server di 'registrare' questa nuova istanza, tutte le le successive richieste che hanno questo hash si autenticheranno su quell'istanza.

inoltre, utilizzare connessioni crittografate SSL per impedire lo sniffing.

Si prega di non risolvere questo con sicurezza attraverso l'oscurità come XORing in tutto il luogo, la gente lo scoprirà.

Oh e btw, se il problema riguarda l'integrità dei dati, non è possibile risolverli.I dati inviati sono sempre forniti dall'utente poiché tutto ciò che fa la macchina è sotto il controllo dell'utente (presumibilmente).

+0

grazie @garuda: prima di scrivere il post l'avevo già in mente. ma il problema è mroe o meno: Diciamo di aggiornare db mando i dati al remoto come http: // remote/update /? data = ma se non viene aggiornato dal plugin, chiunque può eseguire usando il browser per aggiungi a db, o esegui uno script di shell per moltiplicare questi record – whizzzkid

+0

Quello che avevo inizialmente pianificato era: l'utente aggiorna i dati nel database e la pagina di aggiornamento restituisce un hash id, quindi la prossima volta che il plugin si aggiorna, può aggiornare solo se contiene solo quell'hash e viene rigenerato ad ogni query! – whizzzkid

Problemi correlati