Cómo proteger la información de la cuenta ftp en el código fuente de un programa

10

Escribí un juego que almacena información de puntaje alto en un servidor ftp. En el código fuente, necesito escribir el enlace ftp con el nombre de la cuenta y la contraseña.

Por ejemplo:

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

Esto es java, por cierto. En el archivo de clase, las cadenas se conservan tal como están escritas en el código fuente. Entonces, si alguien pudiera leer el archivo de clase, podría encontrar esta cadena, ftp: // name: [email protected] / , con el nombre de usuario y la contraseña a la vista, de todos modos, tan claro como ligeramente aparece en un archivo de clase.

¿Cuál sería una forma adecuada de proteger el nombre de usuario y la contraseña?

Editar :

Hice una clase de cifrado en java y reemplacé el nombre y la contraseña con llamadas al cifrador con un nombre de usuario y contraseña cifrados, por ejemplo:

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

¿Sería esto suficiente? Y no estaba seguro de si la ofuscación era la mejor solución.

    
pregunta Ryan Stull 07.07.2011 - 05:28
fuente

4 respuestas

17

Hay varios vectores de ataque en este escenario, por lo que no basta con ocultar la contraseña:

  • cualquier código que le des a las personas puede ser manipulado. Esto significa que un atacante solo puede establecer su puntuación más alta en un valor arbitrario
  • ftp, en la forma en que lo usa, no está encriptado, por lo que la comunicación completa se mostrará en un rastreador de red como Wireshark
  • el atacante solo puede establecer un punto de interrupción en el constructor de la clase de URL (muy simple pero un poco molesto porque generalmente hay muchas llamadas a una nueva URL ().
  • el atacante puede descompilar el código fuente y buscar "nueva URL", ya que el ofuscado no ayudará porque este método es parte de La API de Java y por lo tanto no puede ser ofuscado. Si no puede entender el código fuente, puede agregar resultados de depuración o simplemente ubicar el punto de interrupción en un lugar mejor.
  • el atacante puede usar la mejora del código de bytes para agregar un mensaje de registro al constructor de la clase de URL

Por lo tanto, realmente no importa cómo y dónde escondes tu contraseña de ftp.

La única buena solución es tener un servidor que realice el cálculo de puntuación más alto (e incluso de esta manera tiene el problema de los robots). Al menos debe usar un protocolo que admita el cifrado (https, sftp, ftps). Debe asegurarse de que alguien que aprenda las credenciales no pueda destruir los datos de alta puntuación de otros usuarios. Esto se puede hacer con permisos ajustados que solo permiten la creación de nuevos archivos en el servidor ftps / sftp o mediante el uso de una aplicación web que acepte los datos y los almacene ellos mismos.

    
respondido por el Hendrik Brummermann 07.07.2011 - 06:02
fuente
8

FTP es probablemente la forma incorrecta de hacerlo. Es un protocolo de texto claro para que cualquier persona con un rastreador pueda interceptar la solicitud de autenticación y extraer las credenciales, sin importar cuánto las ofusca en el programa.

    
respondido por el john 07.07.2011 - 05:49
fuente
3

¿Por qué no puedes simplemente enviar algunos pares clave / valor a tu servidor como una solicitud de $ post con algún tipo de autenticación para asegurarte de que no se manipule?

    
respondido por el niggles 07.07.2011 - 06:25
fuente
-2

Ofuscación intensa, la sugerencia de Google rompe cualquier información potencialmente importante en mandriles y la almacena en lugares aleatorios. Solo sugeriría hacer una base de datos realmente simple, con una aplicación web realmente simple. App Engine tiene un alojamiento web gratuito basado en cuotas de Java. Hay otros servidores web gratuitos que harán lo que necesites.

El almacenamiento de credenciales en un programa, sin embargo, te morderá el culo.

    
respondido por el Colton 07.07.2011 - 05:34
fuente

Lea otras preguntas en las etiquetas