Regresar a la página www.ComoCrearTuWeb.com
Página 4 de 4 PrimerPrimer 1234
Resultados 46 al 57 de 57

Tema: Seguridad en el uso del PHP y Bases de Datos

  1. #46
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    17
    Bueno, por lo menos ya sé buscar algún que otro fallo, it's something jajajaja

    Entonces sigue dando error no?

  2. #47
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    Bueno revisando tu codigo tienes algunos errores:

    registrando.php

    Código PHP:
    include("conexcion.php");
    $fecha=date("d/m/Y");
    /* Filtras las variables POST pero sigues filtrando la misma variable cuando deberia ser asi:
    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($autor);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($clave);
    $clave=stripslashes($clave);
    $clave=htmlspecialchars($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($acepto);
    */

    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($_POST["autor"]);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($_POST["clave"]);
    $clave=stripslashes($_POST["clave"]);
    $clave=htmlspecialchars($_POST["clave"]);
    $clave=md5($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($_POST["acepto"]);
    $autor=mysql_real_escape_string($autor);

    /* Todo Tu proceso de seguridad y filtracion no sirven si al final terminar trabajando con las variables POST[] */

    if (empty ($_POST["autor"]) || (empty($_POST["clave"]))){
    echo 
    "<h3>Debes rellenar todos los datos</h3>";
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<br/><input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    } else {
    $registrando=mysql_query("SELECT autor FROM usuarios WHERE autor='$autor'");
    if (
    $nuevousuario=mysql_fetch_array($registrando)){
    echo 
    "<h3>*".$autor."*, ya existe</h3>";
    echo 
    "<center><img alt='policia' src='img/Policim a.gif' height='130' width='165' /><br/>";
    echo 
    "<h3>elige otro</h3>";
    echo 
    "<br/><input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    } else {
    if (
    $_POST["acepto"] == 'aceptar'){  // le pasaste el filtro de seguiridad pero al final trabajas con la variable como es enviada
    mysql_query("INSERT INTO usuarios(autor,clave,fechaInscripcion)
    values('
    $autor','$clave','$fecha')") or die ('Solo caracteres latinos ó numeros');
    echo 
    "<h4>Te has registrado con exito</h4><h3> ".$autor."</h3>";
    echo 
    "<img alt='sexy' src='img/Policia-sexy.gif' height='200' width='204' />";
    echo 
    "<h4>Ya formas parte como miembro de este portal</h4>";
    echo 
    "<h3>Para entrar clikea <a href='portal.html'>aqui</a></h3>";
    setcookie("usuario",$autor,time()+7776000);
    setcookie("contrasena",$clave,time()+7776000);
    } else {
    echo 
    "<h3>Debe aceptar las condiciones</h3>";
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<br/><input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    }
    }
    }
    echo 
    "</div></center>";
    exit; 
    entrar.php

    Código PHP:
    if (isset($_COOKIE["usuario"]) && isset($_COOKIE["contrasena"])){
    Header("Location: foro/foro.php");
    }
    include(
    "conexcion.php");
    $fecha=date("d/m/Y");

    /* Filtras las variables POST pero sigues filtrando la misma variable cuando deberia ser asi:
    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($autor);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($clave);
    $clave=stripslashes($clave);
    $clave=htmlspecialchars($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($acepto);
    */

    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($_POST["autor"]);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($_POST["clave"]);
    $clave=stripslashes($_POST["clave"]);
    $clave=htmlspecialchars($_POST["clave"]);
    $clave=md5($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($_POST["acepto"]);
    $autor=mysql_real_escape_string($autor);
    $clave=mysql_real_escape_string($clave); // esta linea no es necesaria pues la clave ya esta en md5 y es solo una cadena alfanumerica
    //Buscamos en la tabla si existe un usuario con ese nombre y esa contraseña
    /* En la siguiente consulta cometes un error grave, dices que clave='md5($clave)' cuando deveria ser unicamente clave='$clave' pues ya has encriptado la clave al comienzo*/
    $registrado=mysql_query("SELECT autor, clave FROM usuarios WHERE autor='$autor' AND clave='md5($clave)'");
    //Si existe un usuario con ese alias y esa clave, entra.
    if ($usuario=mysql_fetch_array($registrado)){
    Header("Location: portal.html");
    setcookie("usuario",$autor,time()+7776000);
    setcookie("contrasena",$clave,time()+7776000);
    exit;
    } else {
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<h2>Area exclusiva de los miembros</h2>";
    echo 
    "<input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    }
    exit; 

  3. #48
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    Vale, despues de seguir tus correcciones, serverdns, me sigue dando "Area exclusiva de miembros" , osea que una vez registrado con md5, cuando inicia otra session no me reconoce la clave. ¿Donde está el error?
    Ahora queda asi, aqui se registra por 1ª vez.
    registrando.php
    Código PHP:
    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($autor);
    $autor=mysql_real_escape_string($autor);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($clave);
    $clave=stripslashes($clave);
    $clave=htmlspecialchars($clave);
    $clave=md5($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($acepto);
    if (empty (
    $autor) || (empty($clave))){ 
    y aqui inicia otra session
    entrar.php
    Código PHP:
    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($autor);
    $autor=mysql_real_escape_string($autor);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($clave);
    $clave=stripslashes($clave);
    $clave=htmlspecialchars($clave);
    $clave=mysql_real_escape_string($clave);
    $clave=md5($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($acepto);
    //Buscamos en la tabla si existe un usuario con ese nombre y esa contraseña
    $registrado=mysql_query("SELECT autor, clave FROM usuarios WHERE autor='$autor' AND clave='$clave'"); 
    Última edición por gjulian; 13/08/2011 a las 19:30
    Lo mejor de caerse al tropezar, es volverse a levantar.

  4. #49
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    Bueno, para poder ayudarte mejor debes poner todo el codigo que utilizas pues esos fracmentos no me dicen nada, son practicamente los mismo que en los post anteriores, no se especifica como llegan los datos, si vienen de algun formulario o intentas recuperar los datos de la session iniciada al registrarte, o como es que inicias la session.

  5. #50
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    Evidentemente las variables vienen de los nombres de los input de un formulario asi de registro.html
    Código HTML:
    <h2>Registrate</h2>
    <center><form action="registrando.php" method="post" enctype="multipart/form-data" name="entrando">
    <h3 style="color:black">Introduce tus datos</h3>
    <h4>nick</h4>
    <input type="text" name="autor" size="20" />
    <h4>password</h4>
    <input type="password" name="clave" size="20" /><br/>
    <br/><input type="submit" value="entrar" class="enviar" /><br/>
    <input type="checkbox" name="acepto" value="aceptar" checked />
    <small>He leido y acepto las <a href="condiciones.html">condiciones</a></small></center>
    llega a registrando.php:
    Código PHP:
    <?
    echo "<center><div id='registrando'>";
    include(
    "conexcion.php");
    $fecha=date("d/m/Y");
    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($autor);
    $autor=mysql_real_escape_string($autor);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($clave);
    $clave=stripslashes($clave);
    $clave=htmlspecialchars($clave);
    $clave=md5($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($acepto);
    if (empty (
    $autor) || (empty($clave))){
    echo 
    "<h3>Debes rellenar todos los datos</h3>";
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<br/><input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    } else {
    $registrando=mysql_query("SELECT autor FROM usuarios WHERE autor='$autor'");
    if (
    $nuevousuario=mysql_fetch_array($registrando)){
    echo 
    "<h3>*".$autor."*, ya existe</h3>";
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<h3>elige otro</h3>";
    echo 
    "<br/><input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    } else {
    if (
    $_POST["acepto"] == 'aceptar'){
    mysql_query("INSERT INTO usuarios(autor,clave,fechaInscripcion) 
    values('
    $autor','$clave','$fecha')") or die ('Solo caracteres latinos ó numeros');
    echo 
    "<h4>Te has registrado con exito</h4><h3> ".$autor."</h3>";
    echo 
    "<img alt='sexy' src='img/Policia-sexy.gif' height='200' width='204' />";
    echo 
    "<h4>Ya formas parte como miembro de este portal</h4>";
    echo 
    "<h3>Para entrar clikea <a href='portal.html'>aqui</a></h3>";
    setcookie("usuario",$autor,time()+7776000);
    setcookie("contrasena",$clave,time()+7776000);
    } else {
    echo 
    "<h3>Debe aceptar las condiciones</h3>";
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<br/><input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    }
    }
    }
    echo 
    "</div></center>";
    exit;
    ?>
    Hasta aqui todo bien (o eso creo), pues se guarda todo en la bd y la clave codificada.
    Despues si ese usuario registrado quiere comenzar session en otrto momento, si el navegador le borra las cookies al cerrar, tiene el form solo para miembros,que es:entrando.php
    Código PHP:

    if (isset(
    $_COOKIE["usuario"]) && isset($_COOKIE["contrasena"])){
    Header("Location: portal.html");
    exit;
    } else {
    echo 
    "<center><div id='entrando'>";
    echo 
    "<center><form action='entrar.php' method='post' enctype='multipart/form-data' name='entrando'>";
    echo 
    "<h2>Introduce tus datos</h2>";
    echo 
    "<h4>nick</h4>";
    echo 
    "<input type='text' name='autor' size='20' />";
    echo 
    "<h4>password</h4>";
    echo 
    "<input type='password' name='clave' size='20' /><br/>";
    echo 
    "<br/><input type='submit' value='entrar' class='enviar' />";
    echo 
    "</form>";
    echo 
    "</div></center>";
    }
    exit;
    ?> 
    que manda los datos a entrar.php
    Código PHP:
    <?
    if (isset($_COOKIE["usuario"]) && isset($_COOKIE["contrasena"])){
    Header("Location: foro/foro.php");
    }
    include(
    "conexcion.php");
    $fecha=date("d/m/Y");
    $autor=strip_tags($_POST["autor"]);
    $autor=htmlentities($autor);
    $autor=mysql_real_escape_string($autor);
    $clave=strip_tags($_POST["clave"]);
    $clave=htmlentities($clave);
    $clave=stripslashes($clave);
    $clave=htmlspecialchars($clave);
    $clave=md5($clave);
    $clave=mysql_real_escape_string($clave);
    $acepto=strip_tags($_POST["acepto"]);
    $acepto=htmlentities($acepto);
    //Buscamos en la tabla si existe un usuario con ese nombre y esa contraseña
    $registrado=mysql_query("SELECT autor, clave FROM usuarios WHERE autor='$autor' AND clave='$clave'");
    //Si existe un usuario con ese alias y esa clave, entra. 
    if ($usuario=mysql_fetch_array($registrado)){
    Header("Location: portal.html");
    setcookie("usuario",$autor,time()+7776000);
    setcookie("contrasena",$clave,time()+7776000); 
    exit;
    } else {
    echo 
    "<center><img alt='policia' src='img/Policia.gif' height='130' width='165' /><br/>";
    echo 
    "<h2>Area exclusiva de los miembros</h2>";
    echo 
    "<input type='button' value='volver' name='volver' onclick='history.back()' /></center>";
    }
    exit;
    ?>
    Y es aqui donde me parece que esta el problema, pues no reconoce la clave.
    Si elimino la linea $clave=md5($clave); tanto de registrando.php como de entrar.php, todo va bien, pero con ella no. ¿que falla?
    ¿Que os parece?
    Última edición por gjulian; 16/08/2011 a las 15:28
    Lo mejor de caerse al tropezar, es volverse a levantar.

  6. #51
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    todo parece estar bien, quita esta linea de tus php $clave=mysql_real_escape_string($clave); no es necesaria pues la $clave va encriptada en md5 y es simplemente una cadena alfanumerica, tu script esta publicado en la web? podrias poner el link para testearlo.

  7. #52
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    No, no está publicada,trabajo en local con wampserver.
    Yo tampoco me explico ¿porque, si al registrarte se introduce la clave codificada en md5, (que aparece en la bd) no la reconoce en otra session? Cuando tambien se envia la clave codificada en md5 al form de usuarios registrados.
    No se, no se
    Lo mejor de caerse al tropezar, es volverse a levantar.

  8. #53
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    prueba borrando todos los registros de la base de datos y registrando nuevos, no se que mas puede ser, todo se ve bien, no puedo probarlo porque me arian falta tus tablas de la base de datos, pero a simple vista todo esta bien.

  9. #54
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    Nada, por mas que lo intento no hay manera, no doy con el fallo. Ni por que borre los registros de la bd e ingrese nuevos, ni nada.
    Mira esta es la composicion de mi bd:
    Código:
    Campo 	                Tipo 	        Cotejamiento 	     Predeterminado	Nulo        Extra   
    id 	                int(6) 		                     Ninguna 	        No          auto_increment 		
    autor 	                varchar(25) 	utf8_spanish_ci      Ninguna            No
    clave 	                varchar(25) 	utf8_spanish_ci      Ninguna	        No			
    fechaInscripcion 	varchar(10) 	utf8_spanish_ci      Ninguna 	        No
    Me pregunto ¿No habrá que darle un atributo extra al campo clave? md5 por ejemplo.
    Última edición por gjulian; 20/08/2011 a las 17:06
    Lo mejor de caerse al tropezar, es volverse a levantar.

  10. #55
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    Ahora veo el error, tu error esta en el campo de la tabla en la base de datos clave varchar(25) el md5 te genera una cadena de 32 caracteres por lo tanto debes cambiar el tipo de campo de varchar(25) a varchar(32) y asi deberia funcionar todo correctamente.

    el problema esta que al guardar el md5 en tu base de datos solo se guardan los primeros 25 caracteres y al comparar no coinciden porque el md5 son 32 caracteres.

  11. #56
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15

    ¡¡ENHORABUENA!!
    Eres un mounstro serverdns, yo no me habría dado cuenta nunca.
    ¿Siempre son 32 caracteres? ¿sea el password lo largo que sea?
    Muchas gracias.
    Lo mejor de caerse al tropezar, es volverse a levantar.

  12. #57
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    17
    Sí, en md5 siempre serán 32 carácteres , o almenos de momento

Temas Similares

  1. Bases de datos
    Por apolo en el foro Php Bases de Datos y MySQL (Nuevo!)
    Respuestas: 4
    Último Mensaje: 18/11/2010, 04:12
  2. Consulta - Varias bases de datos
    Por nosabernada en el foro Php Bases de Datos y MySQL (Nuevo!)
    Respuestas: 5
    Último Mensaje: 21/04/2009, 16:38

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •