web-dev-qa-db-fra.com

Comment protéger les informations de compte FTP dans le code source d'un programme

J'ai écrit un jeu qui stocke des informations de scores élevées sur un serveur FTP. Dans le code source, je dois écrire le lien FTP avec le nom de compte et le mot de passe.

Par exemple:

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

C'est Java, BTW. Dans les chaînes de fichier de classe sont préservées, car elles sont écrites dans le code source. Donc, si quelqu'un a pu lire le fichier de classe, il pourrait trouver cette chaîne, nom FTP: // Nom: [email protected]/ , avec le nom d'utilisateur et le mot de passe à la vue de la vue comme une légère monte dans un fichier de classe quand même.

Quel serait un moyen approprié de sécuriser le nom d'utilisateur et le mot de passe?

Edit :

J'ai fait une classe de cryptage dans Java et remplacé le nom et le mot de passe avec des appels sur le crypter avec un nom d'utilisateur et un mot de passe crypté par exemple:

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

Cela serait-il suffisant? Et je n'étais pas sûr si l'obfuscation était la meilleure solution cependant.

10
Ryan Stull

Il existe un certain nombre de vecteurs d'attaque dans ce scénario, il suffit donc de cacher le mot de passe ne vous aidera pas:

  • tout code que vous abandonnez aux personnes peut être manipulé. Cela signifie qu'un attaquant peut simplement définir son score élevé à une valeur arbitraire
  • fTP, de la manière dont vous l'utilisez, est non crypté, la communication complète apparaîtra donc dans un renifleur réseau tel que Wireshark
  • l'attaquant peut simplement définir un point d'arrêt sur le constructeur de la classe d'URL (très simple mais un peu ennuyeux car il y a généralement de nombreux appels vers une nouvelle URL ().
  • l'attaquant peut décompiler le code source et rechercher "nouvelle URL", obscurcissant ne vous aidera pas car cette méthode fait partie du Java API et ne peut donc pas être obscurcée. S'il ne peut pas comprendre le code source, il peut ajouter de la sortie de débogage ou simplement placer le point d'arrêt à un meilleur endroit.
  • l'attaquant peut utiliser le code d'octet améliorant pour ajouter un message de journalisation au constructeur de la classe URL.

Cela compte donc pas vraiment comment et où vous cachez votre mot de passe FTP.

La seule bonne solution consiste à avoir un serveur qui effectue le calcul de haut niveau (et même de cette façon a le problème des robots). Vous devez au moins utiliser un protocole prenant en charge le cryptage (HTTPS, SFTP, FTPS). Vous devez vous assurer que quelqu'un qui apprend les informations d'identification ne peut pas détruire les données de pointage élevées des autres utilisateurs. Cela peut être fait par des autorisations serrées qui n'autorisent que la création de nouveaux fichiers dans le serveur FTPS/SFTP ou à l'aide d'une application Web qui accepte les données et stockez-la elles-mêmes.

17

FTP est probablement le mauvais moyen d'y aller. C'est un protocole de texte clair afin que toute personne avec un renifleur puisse intercepter la demande d'authentification et extraire les informations d'identification, peu importe combien vous les obtenez dans le programme.

8
john

Pourquoi ne pouvez-vous pas simplement envoyer des paires de clé/valeur sur votre serveur en tant que demande $ post avec une sorte d'authentification pour vous assurer qu'elle n'est pas manipulée?

3
niggles