Regresar a la página www.ComoCrearTuWeb.com
Página 3 de 4 PrimerPrimer 1234 ÚltimoÚltimo
Resultados 31 al 45 de 57

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

  1. #31
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    Ok, Yo Recomiendo Las Validaciones solo para los datos importantes y necesarios, que serian en tu caso, usuario, correo, Y contraseña, ya que el nombre seria dificil de validar, ya que no conocemos todos los nombres, al igual que los apeidos y ciudades, con el simple hecho de validar que no esten vacias y limpias de codigo malicioso seria suficiente.

    para poder validar el usuario debes plantearte que caracteres seran aceptados, por ejemplo: A-Z, a-z, 0-9, _ -

    Para Validar el correo podrias leerte esto Validar correos con php

    Las contraseñas, desconosco como las guardas en la base de datos, pero al tratarse de contraseñas, generalmente son encriptadas con algun metodo, el mas usado md5(); si usas un algoritmo de encriptacion para las contraseñas, la variable que la lleva no deberias pasarla por los filtros de codigo malicioso, ya que si por ejemplo yo soy aficionado al html y quiero que mi contraseña sea <html>serverdns<br> tus filtros la limpiaran y si me registro cuando quiera loguearme no lo podre hacer porque tu script modifico mi contraseña.

    En cuanto ha blokear los usuarios por ip es una mala idea, ya que muchos de los usuarios tienen ip dinamica, y rara vez tienen la misma ip al navegar, es mejor blokearos por usuario o por correo electronico.

  2. #32
    Me va gustando esto... Habitante
    Fecha de Ingreso
    31 may, 10
    Ubicación
    Madrid, España
    Mensajes
    242
    Poder de Reputación
    12
    Lo e deducido de java

    El texto es: "is_empty",

    y el email es "is_anemailaddress",

    pero no se si es correcto

  3. #33
    Me va gustando esto... Habitante
    Fecha de Ingreso
    31 may, 10
    Ubicación
    Madrid, España
    Mensajes
    242
    Poder de Reputación
    12
    Ok, lo e entendido casi todo, pero me e perdido del todo en lo de encritar las contraseñas eso es nuevo, yo las guardaba en una base de datos, nada mas.

    Pero ire por partes, primero limpiar de codigo malicioso, con las 4 reglas de antes.

    despues validar correos, usuarios y contraseñas

    Y por ultimo encriptar contraseñas.

    Lo de bloquear, puede ser por ip, por usuario, o por email, lo puedo hacer por cualquiera de los tres campos.

    Bueno espero que esto tambien sirva a alguien mas que lo lea.

    Gracias y perdona, pero habras comprobado que estoy muy verde en esto.

  4. #34
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    javascript y php son diferentes, las funciones que usa javascript en la mayoria de los casos no son iguales que en php, asi que no puedes uarlas en php.

  5. #35
    Me va gustando esto... Habitante
    Fecha de Ingreso
    23 mar, 11
    Ubicación
    Cali, Colombia
    Mensajes
    68
    Poder de Reputación
    10
    Cita Iniciado por Jeyn Ver Mensaje
    Ok, lo e entendido casi todo, pero me e perdido del todo en lo de encritar las contraseñas eso es nuevo, yo las guardaba en una base de datos, nada mas.

    Pero ire por partes, primero limpiar de codigo malicioso, con las 4 reglas de antes.

    despues validar correos, usuarios y contraseñas

    Y por ultimo encriptar contraseñas.

    Lo de bloquear, puede ser por ip, por usuario, o por email, lo puedo hacer por cualquiera de los tres campos.

    Bueno espero que esto tambien sirva a alguien mas que lo lea.

    Gracias y perdona, pero habras comprobado que estoy muy verde en esto.
    Jejeje no te preocupes, encriptar contraseñas es una de las cosas más fáciles que hay en PHP :)
    Te pondré un ejemplo práctico-gráfico:

    Código PHP:
    <?
    // Supongamos que queremos guardar una contraseña de un usuario en nuestra BBDD. Seguimos los pasos comentados anteriormente.
    //1. Revisamos, como bien dijo serverdns de que nuestra variable no esté vacía.
    if(!empty($_POST['pass'])){
    //2. Si no está vacía se limpia la variable $_POST de cualquier posible código malicioso.
    $pass stripslashes($_POST['pass']));
    $pass stript_tags($pass);
    $pass htmlentities($pass);
    $pass htmlspecialchars($pass);
    //3. Encriptamos la contraseña con md5()
    $pass md5($pass);
    ?>
    Eso es todo, así de fácil :)
    Última edición por Áldaron; 05/04/2011 a las 14:48
    Pienso, comparto, aprendo, luego creo

  6. #36
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    Si bien encriptar contraseñas es lo mas simple del mundo en php, Áldaron tu ejemplo es bueno, pero almenos yo no considero correcto, ya seria un codigo inecesario, 4 funciones que procesan una variable que quizas lleve codigo malicioso, la limpian y despues la encripta el md5(); todo bien, pero se perdieron milisegundos en procesar una variable para quitar un codigo que quedaria inutilizado al encriptar con md5(); esos milisegundos podrian utilizarse para validar la contraseña:

    Validando Y Encriptando contraseñas.
    Código PHP:
    $codigo1=isset($_POST['pass1'])?$_POST['pass1']:'';
    $codigo2=isset($_POST['pass2'])?$_POST['pass2']:'';
    $minimo=6;
    if(!empty(
    $codigo1) && strlen($codigo1)>=$minimo && !empty($codigo2) && strlen($codigo2)>=$minimo){
    $codigo1_md5=md5($codigo1);
    $codigo2_md5=md5($codigo2);
    if(
    $codigo1_md5==$codigo2_md5){
    echo 
    "La contraseña es correcta, mayor o igual ha $minimo";
    }else{
    echo 
    "Las contraseñas no son iguales";
    }
    }else{
    echo 
    "La contraseña esta vacia o es menor a $minimo";


  7. #37
    Me va gustando esto... Habitante
    Fecha de Ingreso
    31 may, 10
    Ubicación
    Madrid, España
    Mensajes
    242
    Poder de Reputación
    12
    Ok, lo conseguí, gracias

    Por lo menos he conseguido que me funcione, aplicando lo que me habeis puesto.

    Ahora solo me queda una cosa que abrire otro post para ello, es para recuperar la contraseña.

    Ah! una cosilla, yo cuando pongo aqui codigos los pongro entre etiqueta "quote" como se hace para ponerlo como vosotros?. Es que se ven mejor los codigos

    Muchas gracias de nuevo

    Un saludo

  8. #38
    Me va gustando esto... Habitante
    Fecha de Ingreso
    23 mar, 11
    Ubicación
    Cali, Colombia
    Mensajes
    68
    Poder de Reputación
    10
    Ya te respondí a tu otro post de "recuperación de contraseñas" y para poner el código con colores debes poner tu código entre los tags [ PHP] y [/ PHP]. Nótese que hay espacios entre [ PHP y [ /PHP, esto lo hago porque sino el sistema lo reconocería como que quiero escribir un código :P
    Pienso, comparto, aprendo, luego creo

  9. #39
    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
    Se que llego un poco tarde, pero hasta ahora no me había planteado el tema de la seguridad, y por lo que veo es bastante arduo.
    Bueno al tema. Si hago un select de dos campos a mi bd ¿como he de poner el mysql_real_escape_string?
    Para uno es asi:
    Código PHP:
    mysql_query("SELECT nombre FROM usuarios WHERE nombre='".mysql_real_escape_string($nombre)."'"); 
    ¿Pero para dos?
    Código PHP:
    mysql_query("SELECT nombre, clave FROM usuarios WHERE nombre='$nombre' AND clave='$clave'"); 
    ¿Como sería?
    Y otra cosa, si paso la clave por md5, mi bd la guarda codificá y si quiero entrar en otra sesion, no me reconoce la clave.
    ¿como hago para que la reconozca?
    Gracias
    Última edición por gjulian; 06/08/2011 a las 17:46
    Lo mejor de caerse al tropezar, es volverse a levantar.

  10. #40
    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, el tema de poner "mysql_real_escape_string" a un select de dos campos, lo he solucionao.
    Código PHP:
    $registrado=mysql_query("SELECT nombre, contrasena FROM usuarios WHERE nombre='".mysql_real_escape_string($nombre)."' AND contrasena='".mysql_real_escape_string($contrasena)."'"); 
    Pero sigo sin sacar la solucion del envio de contraseña por md5.
    He estado googleando, y deduzco que no se puede ya que la codificacion en md5 es unica cada vez, osea que no tienen asignado un valor cada caracter, sino que se crea por un proceso que desconozco mediante nº primos.
    Por tanto no vale usar el md5 para guardar la contraseña en una bd, ya que en la siguinte session no coinciden las contraseñas.
    Lo mejor de caerse al tropezar, es volverse a levantar.

  11. #41
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    28 jun, 08
    Mensajes
    499
    Poder de Reputación
    16
    Estas equivocado, el md5 de un archivo y/o cadena siempre es el mismo, la en criptacion de md5 es irreversible, esto es que una vez encriotado con md5 no podras volver ha desencriptar, solo utilizando fuerza bruta, de hecho el md5 es muy utilizado en la encriptacion de contraseñas, para mas seguridad algunos utilizas dobre encripotacion o tripe.

    debes estar utilizando mal la encriptacion o al momento de comparar y hacer tu consulta debes estar cometiendo un error. quizas si pones tu codigo completo se podria ver el error.

  12. #42
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,044
    Poder de Reputación
    21
    @gjulian: corrijanme si me equivoco, pero lo siguiente debería funcionar:

    Código PHP:
    $nombre mysql_real_escape_string($nombre);
    $contrasena mysql_real_escape_string($contrasena);
    // A no ser de que la contraseña se haya encriptado anteriormente, es necesario encriptarla para compararla con la contraseña guardada que, supuestamente, ya esta encriptada.
    $registrado=mysql_query("SELECT nombre, contrasena FROM usuarios WHERE nombre='".$nombre."' AND contrasena='".md5($contrasena)."'"); 
    Si guardaste la contraseña encriptada, entonces debes tener en cuenta que el usuario no ingresará la contraseña encriptada y por ende, si la comparas tal cual la ingresó el usuario, entonces nunca encontrará coincidencias, por ello tienes que encriptarla antes de comparar.

    Saludos.

  13. #43
    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
    Pues he probado de todas formas y no hay manera. Dejo el codigo por si veis el fallo.
    En registrando.php
    Código PHP:
    include("conexcion.php");
    $fecha=date("d/m/Y");
    $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);
    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/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; 
    Y para la proxima session
    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($_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);
    //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='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; 
    Última edición por gjulian; 12/08/2011 a las 16:35
    Lo mejor de caerse al tropezar, es volverse a levantar.

  14. #44
    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
    Seguro que me equivoco, pero por probar...

    En entrar.php prueba cambiando esta línea
    Código:
    $registrado=mysql_query("SELECT autor, clave FROM usuarios WHERE autor='$autor' AND clave='md5($contrasena)'");
    por esta
    Código:
    $registrado=mysql_query("SELECT autor, clave FROM usuarios WHERE autor='$autor' AND clave='md5($clave)'");

  15. #45
    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
    Bien visto Doodleo, ese error es un lapsus que correji cuando lo copiaba para pegarlo aqui.
    Gracias
    Lo mejor de caerse al tropezar, es volverse a levantar.

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
  •