Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: tecasoft en 17 Noviembre 2012, 18:04 PM

Título: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 17 Noviembre 2012, 18:04 PM
mysql_real_escape_string sea a actualizado no¿¿? xk ahora cifra los datos que pasa pero no los puedo guardar en la base de datos que hago, aqui os paso el codigo con el mysql_real_escape_string comentado sino no me funciona y no loguea el usuario "SERGIO":


<?php
session_start
();

if(!isset(
$_SESSION['usuario1']))
{
$usuario=$_POST['usuario'];
$pass=$_POST['contrasena'];

/* cifra el mysql_real_escape_string los datos, asi que habrá que de algun modo de cifrar los datos pero que estos sean devueltos en la base de datos*/
/*$usuario=mysql_real_escape_string($usuario);*/
$pass=mysql_real_escape_string($pass);


$cifrad=hash('sha512','$pass');

}
else
{
$usuario=$_SESSION['usuario1'];
$cifrad=$_SESSION['contrasena'];
}

include(
"conexionbd.php");

$conexion=mysql_connect($host,$usu,$pusu);

mysql_select_db($bd,$conexion);

$correcto=0;
$result=mysql_query("select cod_admin,usuario1,contrasena from REC_administradores where usuario1='$usuario' and contrasena='$cifrad'",$conexion);

if(
$fila1=mysql_fetch_array($result))
{
$fila1['cod_admin'];
$_SESSION['usuario1']=$fila1['usuario1'];
$_SESSION['contrasena']=$fila1['contrasena'];
$correcto=1;


}

if(
$correcto==1)
{
echo 
"Has entrado: "$fila1['cod_admin'];
}

if(
$correcto==0)
{
echo 
"No entras";
unset(
$_SESSION['usuario1']);
unset(
$_SESSION['contrasena']);

}

mysql_close($conexion);
?>




--
-- TABLA Administradores
--

CREATE TABLE REC_administradores(
cod_admin INTEGER NOT NULL AUTO_INCREMENT,
usuario1 VARCHAR(200) NOT NULL,
contrasena VARCHAR(200) NOT NULL,
adminemail VARCHAR(200) NOT NULL,
usuario VARCHAR(20),
CONSTRAINT PKUSUA PRIMARY KEY (cod_admin),
CONSTRAINT adminunica1 UNIQUE(usuario1),
CONSTRAINT adminunica11 UNIQUE(usuario)
) ENGINE=InnoDB;


NECESITO contra sql injection y cifrar la base de datos con algun algoritmo recursivo*.
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 17 Noviembre 2012, 19:40 PM
E RECTIFICADO Y X CIERTO MYSQL_REAL_ESCAPE_STRING esta totalmente descartado da errores:


<?php
session_start
();

if(!isset(
$_SESSION['usuario1']))
{
$usuario=$_POST['usuario'];
$pass=$_POST['contrasena'];

/*$dato=12345;
if (strlen($dato)<1 || strlen($dato)>15)
{
      echo  " El limite del dato es de 15 caracteres<br>";
      return false; 
   }
   echo $dato;*/
/* cifra el mysql_real_escape_string los datos, asi que habrá que de algun modo de cifrar los datos pero que estos sean devueltos en la base de datos*/
/*$usuario=mysql_real_escape_string($usuario);*/
/*$pass=mysql_real_escape_string($pass);*/


$cifrad=hash('sha512',$pass);
echo 
$cifrad;
}
else
{
$usuario=$_SESSION['usuario1'];
$cifrad=$_SESSION['contrasena'];
}

include(
"conexionbd.php");

$conexion=mysql_connect($host,$usu,$pusu);

mysql_select_db($bd,$conexion);

$correcto=0;
$result=mysql_query("select cod_admin,usuario1,contrasena from REC_administradores where usuario1='$usuario' and contrasena='$cifrad'",$conexion);

if(
$fila1=mysql_fetch_array($result))
{
$fila1['cod_admin'];
$_SESSION['usuario1']=$fila1['usuario1'];
$_SESSION['contrasena']=$fila1['contrasena'];
$correcto=1;


}

if(
$correcto==1)
{
echo 
"Has entrado: "$fila1['cod_admin'];
}

if(
$correcto==0)
{
echo 
"No entras";
unset(
$_SESSION['usuario1']);
unset(
$_SESSION['contrasena']);

}

mysql_close($conexion);
?>

Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 17 Noviembre 2012, 20:15 PM
estoy haciendo mi codigo pero nose si ando bien, comenten algo sobre la lista blanca xk parece que eso es lo que me falla ahora solo. ademas necesito algun array o algo para no repetir codigo como lo podria hacer tambien en lo de longitud de caracateres, gracias haber si sale algun experto en arrays o algo de esto,porque sino tendria x cada campo que repetir codigo y eso es mucho codigo:


<?php
session_start
();

if(!isset(
$_SESSION['usuario1']))
{
$usuario=$_POST['usuario'];
$pass=$_POST['contrasena'];


if (
strlen($usuario)<|| strlen($usuario)>15)
{
      echo  
" El limite esta entre 8 y 15 caracteres<br>";
      return 
false
   }

//es mejor hacer una lista blanca con caracteres permitidos que una negra, lo que no este aquí simplemente se ignora
   
$validos "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789-_ @#";
   for (
$i=0$i<strlen($usuario); $i++){
      if (
strpos($validossubstr($usuario,$i,1))===false){
         echo  
" Contiene caracteres no permitidos<br>";
                                    return 
false ;        
         
      }
   }
   return 
true;


/* cifra el mysql_real_escape_string los datos, asi que habrá que de algun modo de cifrar los datos pero que estos sean devueltos en la base de datos*/
/*$usuario=mysql_real_escape_string($usuario);*/
/*$pass=mysql_real_escape_string($pass);*/


/*$cifrad=hash('sha512',$pass);*/

}
else
{
$usuario=$_SESSION['usuario1'];
$cifrad=$_SESSION['contrasena'];
}

include(
"conexionbd.php");

$conexion=mysql_connect($host,$usu,$pusu);

mysql_select_db($bd,$conexion);

$correcto=0;
$result=mysql_query("select cod_admin,usuario1,contrasena from REC_administradores where usuario1='$usuario' and contrasena='$cifrad'",$conexion);

if(
$fila1=mysql_fetch_array($result))
{
$fila1['cod_admin'];
$_SESSION['usuario1']=$fila1['usuario1'];
$_SESSION['contrasena']=$fila1['contrasena'];
$correcto=1;


}

if(
$correcto==1)
{
echo 
"Has entrado: "$fila1['cod_admin'];
}

if(
$correcto==0)
{
echo 
"No entras";
unset(
$_SESSION['usuario1']);
unset(
$_SESSION['contrasena']);

}

mysql_close($conexion);
?>

Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: WarGhost en 18 Noviembre 2012, 11:44 AM
No doble postees por favor, existe un botón que es el de editar mensaje ;).

Lo primero que te puedo decir así viéndolo por encima es que no uses la extensión mysql, usa la extensión mysqli.
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 18 Noviembre 2012, 17:46 PM
xk mysqli?¿ y si tengo un proyecto echo en mysql que pasaria¿?
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: WarGhost en 18 Noviembre 2012, 20:40 PM
Nada, simplemente te ira más lento, estas usando estándares desaconsejados... y quien sabe que si en una futura actualización de PHP eliminen esa extensión y te toque reescribir el código entero xD.
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 18 Noviembre 2012, 20:56 PM
es decir que tendria que cambiar de mysql todas mysql_connect,mysql_select_db, etc dices¿¿¿?
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: WarGhost en 18 Noviembre 2012, 21:05 PM
Sip,

http://www.php.net/manual/es/mysqlinfo.api.choosing.php
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 18 Noviembre 2012, 21:33 PM
tu con cual trabajas¿? y los archivos php.ini etc, actuan bien¿?
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: Graphixx en 19 Noviembre 2012, 17:11 PM
Cita de: tecasoft en 18 Noviembre 2012, 20:56 PM
es decir que tendria que cambiar de mysql todas mysql_connect,mysql_select_db, etc dices¿¿¿?

yo quede con la misma duda. :silbar:
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: WarGhost en 19 Noviembre 2012, 18:12 PM
Sip, hay que cambiar todo por la extorsiona mysqli o PDO.

Respecto a la que yo uso.... depende del proyecto, si solo utilizo mysql como BD uso mysqli, pero en cambio.. si necesito crear un sistema híbrido con varios motores de BDs PDO.
Título: Re: como puedo cifrar mi base de datos y a la vez tener seguridad sql
Publicado por: tecasoft en 20 Noviembre 2012, 22:06 PM
puedes poner algun ejemplo de login.php para ver las funciones como las utilizas porque yo utilizaba el mysql_fetch_array y hay metia un valor $correcto=1 para que me entrara si fuera $correcto=1 sino entraba con $correcto=0, como se haria con mysqli en este ejemplo:


<?php
session_start
();

if(!isset(
$_SESSION['usuario1']))
{
$usuario=$_POST['usuario'];
$pass=$_POST['contrasena'];


if (
strlen($usuario)<|| strlen($usuario)>15)
{
      echo  
"El limite esta entre 8 y 15 caracteres<br>";      
      return 
false;
   }

//es mejor hacer una lista blanca con caracteres permitidos que una negra, lo que no este aquí simplemente se ignora
   
$validos "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789-_@#";
   for (
$i=0$i<strlen($usuario); $i++){
      if (
strpos($validossubstr($usuario,$i,1))===false){
         echo  
" Contiene caracteres no permitidos<br>";
                                    return 
false ;        
         
      }
   }

$cifrad=hash('sha512',$pass);

}
else
{
$usuario=$_SESSION['usuario1'];
$cifrad=$_SESSION['contrasena'];
}

include(
"conexionbd.php");

$conexion=mysql_connect($host,$usu,$pusu);

mysql_select_db($bd,$conexion);

$correcto=0;
$result=mysql_query("select cod_admin,usuario1,contrasena from REC_administradores where usuario1='$usuario' and contrasena='$cifrad'",$conexion);

if(
$fila1=mysql_fetch_array($result))
{
$fila1['cod_admin'];
$_SESSION['usuario1']=$fila1['usuario1'];
$_SESSION['contrasena']=$fila1['contrasena'];
$correcto=1;


}

if(
$correcto==1)
{
echo 
"Has entrado: "$fila1['cod_admin'];
}

if(
$correcto==0)
{
echo 
"No entras";
unset(
$_SESSION['usuario1']);
unset(
$_SESSION['contrasena']);

}

mysql_close($conexion);
?>