Sicurezza server e MySQL per applicazioni Java / JDBC?

5

Ho un'applicazione java esterna che usa JDBC per raggiungere un database MySQL.

Questo verrà usato da molte persone e sta per memorizzare tutti i dati delle persone sullo stesso server / MySQL.

Come scommetto che le persone saranno in grado di decifrare il .jar e vedere la fonte, mi aspetto che siano in grado di imbrogliare il programma modificandolo e facendolo ottenere informazioni da altri utenti anche quando non sono autorizzati a raggiungere detto informazioni.

Esiste un modo standard per proteggere un server in modo che le persone possano solo essere in grado di raggiungere le informazioni a cui è collegato il proprio account anche se tali persone sono in grado di cambiare la fonte?

Saluti, Skarion

    
posta Skarion 02.10.2010 - 21:30
fonte

2 risposte

3

Un modo per risolvere il problema è utilizzare un programma sul lato server per ottenere le informazioni per il client invece di fare in modo che il client si connetta direttamente al server. Questo può essere sotto forma di pagina web, servizio o RMI.

Il vantaggio di questo è che l'utente non può mai accedere direttamente al database (che è un grande no no), e quindi non può accedere ad altre informazioni o scrivere i propri dati.

Lo svantaggio è che è complicato e richiede script esterni. Devi capire come manderai le informazioni tra il server e il client che non è basato su SQL.

Certo è la soluzione ovvia, ma non è sempre la migliore. Dipende completamente dalla tua app.

Ad esempio, in una delle mie app avevo uno script PHP lato server che richiedeva un sacco di parametri di opzioni e modalità. Questo ha restituito tutte le informazioni in formato JSON ed è stato analizzato dall'app. Era piuttosto semplice, ma ha funzionato per i miei scopi.

Per l'autenticazione quando l'app è stata avviata, ha chiesto allo script una chiave di sessione (per te, chiedi allo script un nome utente e una password). La chiave di sessione era una chiave SHA512 generata a caso molto lunga che è stata passata con tutte le richieste. Per te, se l'utente non dovrebbe avere accesso a qualcosa, quindi restituire un errore.

A seconda della sensibilità delle informazioni, puoi utilizzare HTTPS, crittografia del testo, crittografia degli URL, ecc.

    
risposta data 02.10.2010 - 21:37
fonte
0

È possibile aggiungere sicurezza sul server SQL corretto, utilizzando diversi account utente del database per ciascun utente e gestendo la sicurezza utilizzando le funzionalità SQL; potresti applicare restrizioni di sicurezza tramite stored procedure, viste di sicurezza, ecc.

Questa potrebbe non essere una grande idea, però. La sicurezza SQL non è eccezionale, MySQL potrebbe non implementare tutte le funzionalità necessarie per proteggere efficacemente i tuoi dati e potrebbe comportare un sacco di lavoro da parte tua.

L'altra soluzione è aggiungere un intermediario tra la tua app e il database che è fuori dal controllo degli utenti finali. Fai in modo che la tua app si colleghi a un'altra applicazione, esegua l'autenticazione e la seconda applichi la sicurezza. Questa applicazione potrebbe essere una webapp che espone i metodi necessari tramite servizi web / RPC / REST, qualunque sia.

    
risposta data 27.01.2013 - 20:32
fonte

Leggi altre domande sui tag