Come proteggere le informazioni dell'account ftp nel codice sorgente di un programma

10

Ho scritto un gioco che memorizza informazioni ad alto punteggio su un server ftp. Nel codice sorgente ho bisogno di scrivere il link ftp con il nome dell'account e la password in esso.

Ad esempio:

url = new URL("ftp://name:[email protected]/");

Questo è java, btw. Nel file di classe le stringhe vengono mantenute così come sono scritte nel codice sorgente. Quindi, se qualcuno fosse in grado di leggere il file di classe, potrebbe trovare questa stringa, ftp: // name: [email protected] / , con il nome utente e la password in bella vista, in modo semplice come in un file di classe comunque.

Quale sarebbe un modo appropriato per proteggere il nome utente e la password?

Modifica :

Ho creato una classe di crittografia in java e ho sostituito il nome e la password con le chiamate al codificatore con un nome utente e una password criptati, ad esempio:

url = new URL("ftp://Crypter.crypt("q345uih34",3)+:+Crypter.crypt("nfk3iugr29o8",-2)[email protected]/");

Sarebbe sufficiente? E non ero sicuro se l'offuscamento fosse la soluzione migliore.

    
posta Ryan Stull 07.07.2011 - 05:28
fonte

4 risposte

17

Ci sono molti vettori di attacco in questo scenario, quindi nascondere la password non aiuta:

  • qualsiasi codice che dai alle persone può essere manipolato. Ciò significa che un utente malintenzionato può semplicemente impostare il suo punteggio più alto su un valore arbitrario
  • ftp, nel modo in cui lo si utilizza, non è crittografato, quindi la comunicazione completa verrà visualizzata in uno sniffer di rete come Wireshark
  • l'attaccante può semplicemente impostare un punto di interruzione sul costruttore della classe URL (molto semplice ma un po 'fastidioso perché di solito ci sono molte chiamate al nuovo URL ().
  • l'autore dell'attacco può decompilare il codice sorgente e cercare "nuovo URL", offuscare non aiuterà perché questo metodo fa parte di l'API Java e quindi non può essere offuscata. Se non riesce a capire il codice sorgente, può aggiungere l'output di debug o semplicemente posizionare il punto di interruzione in un posto migliore.
  • l'utente malintenzionato può utilizzare il codice byte migliorando per aggiungere un messaggio di registrazione al costruttore della classe URL

Quindi non importa come e dove nascondi la tua password ftp.

L'unica buona soluzione è avere un server che esegue autonomamente il calcolo dei punteggi migliori (e anche in questo modo ha il problema dei bot). Dovresti almeno utilizzare un protocollo che supporta la crittografia (https, sftp, ftps). È necessario assicurarsi che qualcuno che apprende le credenziali non possa distruggere i dati dei punteggi più alti di altri utenti. Questo può essere fatto con permessi stretti che consentono solo la creazione di nuovi file nel ftp / sftp-server o utilizzando un'applicazione web che accetta i dati e li memorizza da sé.

    
risposta data 07.07.2011 - 06:02
fonte
8

L'FTP è probabilmente il modo sbagliato per farlo. È un protocollo di testo chiaro, quindi chiunque abbia uno sniffer può intercettare la richiesta di autenticazione ed estrarre le credenziali, indipendentemente da quanto le offusca nel programma.

    
risposta data 07.07.2011 - 05:49
fonte
3

Perché non puoi semplicemente inviare alcune coppie chiave / valore al tuo server come una richiesta $ post con una sorta di autenticazione per assicurarti che non sia manipolata?

    
risposta data 07.07.2011 - 06:25
fonte
-2

Offuscante offuscamento, suggerimento di Google che rompe qualsiasi informazione potenzialmente importante nei mandrini e la memorizza in posti casuali. Ti suggerirei di creare un database davvero semplice, con un'app web davvero semplice. App Engine ha un hosting web Java basato su quote gratuite. Ci sono altri host web gratuiti che faranno ciò di cui hai bisogno.

Memorizzando le credenziali in un programma, tuttavia, ti morderò il culo.

    
risposta data 07.07.2011 - 05:34
fonte

Leggi altre domande sui tag