Foros del Web » Programando para Internet » PHP »

Seguridad en php...

Estas en el tema de Seguridad en php... en el foro de PHP en Foros del Web. Buenas. Tengo varias dudas respecto a este lenguaje de programación. Me gustaria crear un apartado para el administrador de la web con login i password. ...
  #1 (permalink)  
Antiguo 13/12/2007, 09:03
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Seguridad en php...

Buenas.
Tengo varias dudas respecto a este lenguaje de programación. Me gustaria crear un apartado para el administrador de la web con login i password. He encontrado muchas paginas sobre el tipico codigo para poder ingresar dichos parametros.
Ejemplo de las FAQ:

Código PHP:
 <?
/* Autenticación
*/
  
$muerte 'Acceso Denegado!!!!  :-p';

  if(!isset(
$PHP_AUTH_USER)) {
    
header('WWW-Authenticate: Basic realm="Nombre del Site"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
$muerte;
    exit;
  } else {
    
// valido mi clave en el servidor ...
    
if (@$db_link mysql_connect("localhost""usuario""clave")) {
        @
mysql_select_db("base_de_datos");
    }

    
$sql "select * from usuarios 
                where ((usr_login = '$PHP_AUTH_USER') 
                     and (usr_pass = '$PHP_AUTH_PW')) "
;

    
$qpassmysql_query($sql$db_link);
    if(
mysql_num_rows($qpass)<>1)  {
      echo 
$muerte;
      exit;
    }

  }
?>
Ahora bien... aquí no se utiliza ningun tipo de encriptación no??? ni ningun metodo SSL/SSH... y de ser así, cualquiera podria ver los datos que viajan por la red y modificar las cosas.
Mi pregunta es, estoy equivocado con lo que he dicho? o la verdad es que no se utiliza encriptación ni ningun metodo de seguridad "minimo" en el acceso a la base de datos y demás opciones que pueda realizar un administrador?
Y otra pregunta, para poder utilizar SSL por ejemplo (ese candado que te sale cuando estas en una pagina que utiliza este metodo de seguridad) necesitas contratar el servicio con alguna empresa que de claves privadas? Como veis ando un poco perdido... :S

Gracias.
  #2 (permalink)  
Antiguo 13/12/2007, 09:17
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Seguridad en php...

El SSL lo tendrás que contratar con el hosting.

El SSH no tienen nada que ver con esto es un protocólo de comunicación, que viene a ser como el Telnet pero cifrado y mucho más seguro. Se puede usar para encapsular todas las comunicaciones por él, como si fuese una VPN, pero vamos, creo que a la hora de crear in sitio web eso no aplica.

Y con respecto a lo demás, sí, no va nada encriptado, toda la comunicación va sin cifrar, lo que quiere decir que si alguien está en la misma red que el cliente o el servidor podría llegar a ver esa comunicación, pero en la práctica no es tan sencillo. Lo normal suele ser que el pass en la base de datos esté encriptado y la comprobación se haga por PHP, por lo que la contraseña viajaría sin cifrar y sólo lo haría en el servidor para comprobarla con la base de datos.

Si eres muy paranoico, puedes encriptar los datos antes de mandarlos (por medio de Javascript).
  #3 (permalink)  
Antiguo 13/12/2007, 09:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Seguridad en php...

Deberías de leer un poco del protocolo SSL, que es una derivación del protocolo HTTP para que tus dudas queden claras.

El código que expones arriba es para hacer un login con una base de datos MySQL, aunque hay unas cosas que cambiar como en lugar de usar $PHP_AUTH_USER usar $_SERVER['PHP_AUTH_USER'] etc.

Las capas extras como SSL, es un protocolo que se implementa aparte de PHP, y te brindan seguridad en la TRANSMISIÓN de los datos no en el procesar los datos.

La encriptación, es algo que tu tienes que implementar como programador a la hora de validar los datos.

Saludos.
  #4 (permalink)  
Antiguo 13/12/2007, 11:27
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Seguridad en php...

Gracias por contestar.
Si en la universidad creamos un sevidor con una llave privada y luego en el navegador nos lo montamos para poder hacer una conexion ssl con ese servidor, lo que pasa que no me acuerdo demasiado bien (solo tenia ganas de sacarme la carrera entonces xDD)
Pues he visto certificados a 80 euros al año, cosa que me parece bastante bien, aunque realmente creo que no lo necesito porque el cliente solo deberia subir fotos, modificar textos o añadirlos i nada de cuentas ni targetas de credito, así que creo que queda descartado.
Lo de enviar la contraseña ecriptada si que creo que es interesante, lo que no he terminado de entender es lo que comentas:

Cita:
Iniciado por GatorV Ver Mensaje

Las capas extras como SSL, es un protocolo que se implementa aparte de PHP, y te brindan seguridad en la TRANSMISIÓN de los datos no en el procesar los datos.
Que quieres decir con procesar los datos? creo que una vez llegue la contraseña encriptada al servidor, lo que deberia hacer es un programilla para desencriptarla y ya esta no? no te entendido con lo de procesar los datos (sabia que SSL era solo para la transmisión)

Cita:
Iniciado por GatorV Ver Mensaje

La encriptación, es algo que tu tienes que implementar como programador a la hora de validar los datos.
Validar cuando lleguen? deberia desencriptarlos si los he enviado encriptados no? (la contraseña es lo unico que me interesa).
Creo que me estoy haciendo un pequeño lio. Nose si he terminado de entenderte GatorV.

Gracias.
  #5 (permalink)  
Antiguo 13/12/2007, 11:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Seguridad en php...

Lo que tienes que hacer es encriptar la contraseña con Javascript antes de enviarla, el problema de esto es que el algoritmo para encriptarla seria publico y serias muy vulnerable, asi que lo mejor es usar un protocolo de comunicacion seguro (SSL).

Luego en PHP, si fue enviada encriptada, desencriptarla usando el mismo algoritmo para entonces validarla contra la base de datos.

Saludos.
  #6 (permalink)  
Antiguo 13/12/2007, 11:59
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Seguridad en php...

Me parece que ya te he entendido.
Es decir, esta contraseña que he enviado encriptada, habra sido encriptada con algun programa "publico" o que la gente conoce y entonces es muy probable que de alguna manera "no sirva de nada" o más bien poco porque se conoce el metodo de desencriptarla no?
Al usar SSL, ese algoritmo lo implementa una empresa dedicada a eso y de eso viven, es decir si se supiera el metodo como encriptan se podria saber como desencriptarlo y al traste con la empresa...
Entonces llegado a este punto que me recomendais?

Gracias.
  #7 (permalink)  
Antiguo 13/12/2007, 12:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Seguridad en php...

Estas entendiendo mal, si no vas a usar SSL, y quieres tener "seguridad" en la transmisión de los datos desde la pagina HTML al script PHP, o mas bien desde el usuario cliente al servidor, entonces necesitas encriptar con un javascript la contraseña para enviarla al servidor, ahora este método de "encriptar" es publico, porque cualquiera puede abrir tu pagina web y ver como hiciste el programa, por lo que seria fácil desencriptar la contraseña.

Luego en tu script PHP necesitas desencriptar la contrasña que te llega codificada y entonces compararla con la base de datos.

Saludos.
  #8 (permalink)  
Antiguo 13/12/2007, 12:42
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Seguridad en php...

Se puede encriptar con algún algoritmo de un sólo camino, como el MD5. Éste algoritmo no se puede desencriptar, a no ser que sea con ataques de diccionario o fuerza bruta.

Esto significa que lo que encriptes y almacenes utilizando éste algoritmo no lo volverás a desencriptar, así que la comprobación la harás con las cadenas encriptadas.
  #9 (permalink)  
Antiguo 13/12/2007, 14:41
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Seguridad en php...

Ahora te he entendido GatorV.
Lo que comentas del MD5, que se deberia poner el programa para encriptar en la pagina no? pq sino igualmente viajaria sinencriptar la contraseña. Y entonces estamos en las mismas...
  #10 (permalink)  
Antiguo 13/12/2007, 15:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Seguridad en php...

Hay varias librerías para codificar en md5 desde Javascript, pero como te comenta Keysher es un algoritmo de una vía así que tendrías que comparar el valor codificado en la base de datos directamente.

Saludos.
  #11 (permalink)  
Antiguo 13/12/2007, 15:51
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Seguridad en php...

Si ya lo he mirado.
Lo que pasa que estamos en las mismas, no sirve "de nada", porque si envio el pass codificado y intercepto esos valores encriptados ya tendria la contraseña para entrar.
La verdad es que no le veo ninguna utilidad si no hay manera de añadir una desencriptación.
O sea que me da a mi que... o SSL o que se envie la contraseña tal cual.

Gracias.
  #12 (permalink)  
Antiguo 13/12/2007, 16:07
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Seguridad en php...

No, no es eso. El proceso sería el siguiente:

- Mediane un formulario el usuario mete su clave y su contraseña.
- Antes de enviar los datos, y por medio de JavaScript, la contraseña se encripta.
- La contraseña viaja encriptada hasta el servidor.
- Allí, se consulta a la BDD y se comprueba si la contraseña encriptada es igual a la que se acaba de recibir.

Claro que éste sistema es vulnerable, si alguien intercepta los datos tiene el hash (la contraseña encriptada), no podría acceder con ella al formulario, pero podría inyectar un paquete http con esa cadena encriptada....

Esto podrías evitarlo usando sesiones en tu script, por ejemplo. Y atinando un poco más la comprobación de donde vengan los datos, etc...

De todos modos, ten en cuenta que en la práctica no suele ser muy normal que se intercepte el tráfico HTTP de alguien, aunque nunca está de más ser algo paranoico.
  #13 (permalink)  
Antiguo 13/12/2007, 16:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Seguridad en php...

Si quieres la seguridad real tu única solución es usar SSL, asi tus datos viajaran codificados y tendrás la seguridad de que si los interceptan les costara mucho trabajo desencriptarlos.
  #14 (permalink)  
Antiguo 13/12/2007, 17:52
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Seguridad en php...

Vale Keysher ya te he entendido! la "unica manera" seria inyectando la clave codificada... vale por fin, pensaba que era tonto ya jeje.
Muchas gracias por este post de seguridad i supongo que no pondre ssl porque tampoco hace falta y lo de la encriptación ya veremos, si me sobra tiempo y el cliente lo quiere ya me lo miraria, aunque me parece que no es muy complicado.
Creo que he resuelto todas mis dudas.

Gracias.
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 01:59.