Foros del Web » Programando para Internet » PHP »

Como almacenar contraseñas de forma segura

Estas en el tema de Como almacenar contraseñas de forma segura en el foro de PHP en Foros del Web. Buenas, Cuando hacemos un script en PHP, ASP, Perl, etc.. para conectarnos a una base de datos normalmente dentro del propio script suele ir la ...
  #1 (permalink)  
Antiguo 18/12/2004, 09:43
Avatar de Tximis  
Fecha de Ingreso: junio-2004
Ubicación: Bilbao
Mensajes: 328
Antigüedad: 13 años, 6 meses
Puntos: 2
Como almacenar contraseñas de forma segura

Buenas,

Cuando hacemos un script en PHP, ASP, Perl, etc.. para conectarnos a una base de datos normalmente dentro del propio script suele ir la contraseña. De modo que si alguien consigue ver el codigo de ese script tendría la contraseña de la base de datos; me refiero a algo como esto:

Código:
<?php 
     $bd_host = "localhost"; 
     $bd_usuario = "user"; 
     $bd_password = "password"; 
     $bd_base = "nuestra_bd"; 

     $con = mysql_connect($bd_host, $bd_usuario, $bd_password); 
     mysql_select_db($bd_base, $con); 
?>
Se me ocurren varias formas para "ocultar" la contraseña, ponerlo mas dificil con algun tipo de ofuscación, pero ninguna de ellas me parece muy viable ya que con el tiempo se sacarían. Queria saber que se suele hacer en estos casos para intentar ocultar estos datos.

Un saludo y muchas gracias a todos.

Última edición por Tximis; 18/12/2004 a las 12:19
  #2 (permalink)  
Antiguo 18/12/2004, 10:04
Avatar de Tximis  
Fecha de Ingreso: junio-2004
Ubicación: Bilbao
Mensajes: 328
Antigüedad: 13 años, 6 meses
Puntos: 2
Hace ya tiempo tambien me preguntaba lo mismo, buscando por Google Groups, he encontrado un mensaje que mande hace cosa de un año. En el aparece una referencia a un mensaje de la lista "secprog", copio literalmente:


Cita:
1. Hardcode the password in the application source code. This makes it slightly more difficult to find (assuming one makes the effort to hide it a bit better rather than having a single string with the password that can be found with any hex editor) but each time you need to change the password you'd need to change the source code.

2. Save the password in a configuration file and let the application pick it up from there. The permissions on the configuration file should be such that only the application can access it. Needless to say this scheme does not prevent administrators, etc. from accessing the password and also assumes good physical security for the box the application is deployed on.
El primer metodo creo que no serviría, ya que la idea es proteger la contraseña almacenada en un script PHP, por lo que no existen ejecutables compilados. El segundo método parece mas efectívo. ¿Qué metodos utilizais vosotros?
  #3 (permalink)  
Antiguo 18/12/2004, 23:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Bueno .. mi técnica es la confianza en mi servicio de hosting.

Si mi administrador de mi servicio de hosting .. si mi BD està tambièn alojada con ellos, poco hago si "ofusco" mi contraseña en mis scripts. Los datos en sì los va a ver directo. El problema serìa por ejemplo si alojas en un servicio de hosting "PHP" y te conectas por ejemplo a tus BD de tu "empresa" remotamente .. ahì le estàs "enseñando" tu contraseña de tus BD al administrador de turno de ese servicio de hosting. En esos casos es bueno definir en tus BD al usuario que va a usar ese tipo de acceso con los mínimos permisos posibles y limitando el "host" que se puede conectar remotamente.

Confio en que la seguridad del servidor y mi aplicaciòn nunca entregarà el archivo (mis scripts que contengan ese dato) al "cliente" (imaginemos que falla "PHP" y no se ejecuta ..el archivo serìa entregado al navegador que lo "pidiera" por el URL).... O que me "copien" o abran el archivo de configuraciòn desde un "vecino" (en hosting compartido, suele pasar por mala configuraciòn de los servidores muy amenudo). En cuanto a mi pròpia programaciòn .. hay que tener cuidado .. si uno hace por ejemplo un sistema de "descargas" o algo asì .. proteger vìa la aplicaciòn mismo que no se pueda descargar algo tipo config.php si es que mandamos a llamar una descarga tipo: bajar.php?archivo=nose.tal ... (que algunas aplicaciones de ese estilo "mal programadas" también sucede).

En resumen .. si no controlo el servidor por usar un servicio de hosting como suele pasar .. al menos "exigo" y "busco" una buena configuraciòn del mismo y "cuidar" lo que uno programa tambièn (no todo es culpa de "otros").

PHP .. a no ser que se use algo tipo "Zend Encoder" que ha de disponer de esa extensiòn el proveedor de hosting instalado en sus servidores como para psudo-compilar los scripts PHP que podamos desarrollar .. el còdigo "fuente" de PHP siempre estará accesible al Administrador de ese "hosting". Creo que "inventar" cosas tipo scripts que "encripten" tu contraseña y la desencripten .. no tienen mucho sentido .. pues el còdigo està ahì (hasta con la "semilla" que tendrìas que usar para encriptar/desencriptar) eso sòlo lo podrìa un poco màs "complicado" obtener tu dato ...

Otro detalle sobre "seguridad de contraseñas" de las BD que nos conectamos se refiere a la pròpia comunicaciòn entre "PHP" (cualquier lenguaje) y la BD. La mayorìa de veces dicha comunicaciòn se hace de forma "local" .. PHP y la BD (Mysql por ejemplo) estàn en el mismo servidor .. no hay nada que salga al "exterior"... En algunos casos podrìan estar ambos en diferentes servidores y conectados a traves de TCP/IP por intenet. En esos casos es recomendable tambièn ver y saber que "por el camino" nos podrìan "robar" dichos datos de conexiòn .. asì que no estaría de màs en esos casos crear "tuneles SSH" para realizar una conexiòn reamente segura y encriptada bajo SSH (Secure Shell).


Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:35.