Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2004
kael kael is offline
Registrado
 
Registrado: oct 2004
Posts: 4
Poder: 0
kael Va por buen camino
Aqui tienes un codigo

Este es el codigo que he hecho y modificado , a mi me anda perfecto .... claro no es el que uso pero de seguro te va a servir.
Código PHP:
    Primero que nada :
    
    
session_start(); // Con esto inicializamos la session
    
    
if($_POST['enviar'])  { //Verificamos si se envio el formulario
    
$nick trim($_POST['nick']); //Sacamos los espacios
    
$pass trim($_POST['pass']); 
    
    if((
$nick=='') || ($pass=='')) { //Si los campos estan vacios ...
     
echo "Debes de rellenar todos los campos!"
    } else { 
//seguimos con el script
    
$query mysql_query("SELECT * WHERE campodelnick='$nick' AND campodelpass='$pass'"); // Sacamos el usuario y el password
    
$datos mysql_fetch_array($query); 
 if((
$nick == $datos[campodelnick]) && ($pass == $datos[campodelpass])) { // Si los datos que pusieron son iguales a los de la db ...
    
$_SESSION['nick'] == $nick;
    
$_SESSION['pass'] == $pass;
    
/* Ahi creamos las sesiones nick y pass si quieres crear otra con otro campo solo pones
    $_SESSION'['nombredelasesion'] == $datos['nombredelcampoenladb'];
    */
    
header("Location : paginaalaquesequieraredirijir.php");
    } else {
    echo 
"Login Incorrecto!";
    } } } else {
    
   if((isset(
$_SESSION['nick'])) || (isset($_SESSION['pass'])) {
    echo 
"Bienvenido ".$_SESSION['nick']." !";
   
/* o sino puedes redirijir a otra pagina por ejemplo :
   header("Location : cp.php");
   */
   
} else {
    
    <
form method='post' action='".$_SERVER['PHP_SELF']."'// Inicio del Formulario
    
Nikc : <input type='text' name='nick'><br// Input donde el usuario va a indicar su nick
    
Password : <input type='password' name='pass'><br// Aqui el password del usuario
    
<input type='submit' name='enviar' value='Ingresar'>
    </
form//Cerramos el formulario
     
}
    } 
Espero que te sirva , si ves que te da algu error me avisas

Última edición por kael fecha: 26-11-2004 a las 03:40:52.
Responder Con Cita
  #2  
Antiguo 25-11-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 24
kayetano Va por buen camino
Hola

Dos retoques:
1.
Código PHP:
  $query mysql_query("SELECT * WHERE campodelnick='$nick' AND campodelpass='$pass'"); // Sacamos el usuario y el password
   
$datos mysql_fetch_array($query);
   if((
$nick == $datos[campodelnick]) && ($pass == $datos[campodelpass])) { // Si los datos que pusieron son iguales a los de la db ...
      
... 
yo lo dejaría asín
Código PHP:
  $query mysql_query("SELECT * WHERE campodelnick='$nick' AND campodelpass='$pass'"); // Sacamos el usuario y el password
   
if(mysql_num_rows($query)) { 
      ... 
Si realizas una consulta con un "nick" y un "pass" y obtienes un resultado esta claro que va a cumplir la condicion de que son iguales a los buscados ya que lo obligas en la clausula "WHERE".

2.
Código PHP:
header("Location : paginaalaquesequieraredirijir.php"); 
Yo siempre termino un "Location" con un "exit"
Código PHP:
header("Location : paginaalaquesequieraredirijir.php");
exit(); 
Si no lo pones así, es posible que se ejecute código no deseado justamente despues del "Location".
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #3  
Antiguo 26-11-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Cita:
Empezado por kayetano
Hola
Si realizas una consulta con un "nick" y un "pass" y obtienes un resultado esta
claro que va a cumplir la condicion de que son iguales a los buscados ya que lo
obligas en la clausula "WHERE".
Tal como esta el codigo, si se eliminan la comprobacion de nick y password posterior y no estan activadas las magic_quotes en la configuracion de php, tendriamos un agujero de seguridad tipico por injeccion de sql, cualquiera podria entrar sin saber el password, bastaria conocer cualquier nombre de usuario para entrar.

Saludos
Responder Con Cita
  #4  
Antiguo 29-11-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 24
kayetano Va por buen camino
Hola

Hombre, no hay que ser alarmistas, si miramos al principio del código de nuestro amigo kael vemos lo siguiente:
Código PHP:
    if( $_POST['enviar'] )  { //Verificamos si se envio el formulario
       
$nick trim($_POST['nick']); //Sacamos los espacios
       
$pass trim($_POST['pass']); 
Con esto ya está obligando a posibles hackers a simular una llamada 'post' a nuestra página, ademas de quitando los espacios con lo que muy posiblemente se vuelva inservible la porción de código sql que se intente añadir.
Se podría retocar un poquito y quedaría mucho mejor asin:
Código PHP:
    if( $_POST['enviar'] )  { 
       
$nick AddSlashestrimstrip_tags$_POST['nick'] ) ) ); 
       
$pass AddSlashestrimstrip_tags$_POST['pass'] ) ) ); 
Elimino las posibles marcas HTML y PHP, elimino espacios y por ultimo marco con barras los caracteres que lo necesiten.

Ahora te propongo yo una cosa, amplia tu respuesta que es más alarmista que de utilidad y explica ¿que es un "agujero de seguridad tipico por injeccion de sql"?, formas de solucionar este problema y ¿donde ves ese agujero en este código?.

Sería interesante que habrieras un nuevo hilo para este tema.

Salu2
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #5  
Antiguo 29-11-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Cita:
Empezado por kayetano
Hola
Hombre, no hay que ser alarmistas, si miramos al principio del código de nuestro amigo kael vemos lo siguiente:
No entiendo como puedes decir que "no hay que ser alarmistas", el agujero de seguridad por injeccion de sql del codigo propuesto es grave y "de libro". Con ese codigo cualquiera puede entrar suplantando a cualquier usuario o incluso como administrador si existen un usuario de ese tipo, y sin necesidad de utilizar ninguna herramienta especial ni programar nada.

Realizando cualquier busqueda en google se encuentran docenas de referencias y explicaciones sobre ese problema.

Tampoco es necesario ser un superhacker para entrar, ni simular un post ni usar nada especial, ya que pides ejemplos, te pondre uno, a pesar de que no deberia ya que segun la legislacion de mi pais (España) estaría cometiendo un delito, pero siendo un tipo de error bastante tipico y ampliamente publicado en internet, espero que no haya ningun problema:

Simplemente ir a la pagina en cuestion con cualquier navegador web y cuando pida el nombre de usuario y contraseña teclear:

Username : admin
Password : XXX' or '1'='1

Y "voila" ya hemos entrado en la pagina como administrador, o sustituyendo "admin" por cualquier nombre de usuario valido, suplantamos tranquilamente a ese usuario.

Saludos
Miguel
Responder Con Cita
  #6  
Antiguo 29-11-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 24
kayetano Va por buen camino
Hola

Yo sigo opinando que es mucho mejor dar soluciones que alarmar a la gente.

Pienso que tu primera contestación debería haber sido del tipo:
Código:
He detectado un problema de seguridad en ese código y es bla, bla, bla y bla
y lo puedes solucionar de la siguiente manera bla, bla, bla, bla y bla
Os aconsejo a todos que tengáis mucho cuidado con el tema de la seguridad porque bla, bla, bla, bla y bla
Pero en cambio has hablado del peligro del "agujero de seguridad tipico por injeccion de sql" pero no has contado que es eso, ni como lo puede utilizar un hacker para entrar en nuestra web, y si en la legislación de tu pais prohibir decir estas cosas, que lo dudo, debes dar la solución para que todos aprendamos a hacer webs mas seguras.

Como veo que estas muy puesto en el tema, y es algo muy importante en las webs, te pido que nos hagas un breve resumen de que es esto, como evitarlo y donde podemos documentarnos más ampliamente.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #7  
Antiguo 29-11-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Lo siento, pero en muchas ocasiones no tengo el tiempo para dar respuestas largas, creo haber dado datos suficientes para que quien le interese del tema pueda buscar en google informacion mas extensa, no se trata de una vulnerabilidad extraña, de modo que esta bien documentada en internet.
Mi opinion es que, es preferible dar algo de informacion que ninguna.

Intentare dar una respuesta mas amplia, cuando tenga algo de tiempo.

Saludos

PD: Y si, lo de las legislaciones de distintos paises europeos se esta poniendo muy chungo, van a la zaga de EEUU en estos temas, dar informacion o herramientas que permitan romper protecciones se ha tipificado como delito, otra cosa es que no se aplique, pero con la ley en la mano es asi .
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 05:00:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi