Foro de elhacker.net

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":

Código:
<?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);
?>

Código:
--
-- 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:

Código:
<?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:

Código:
<?php
session_start();

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


if (strlen($usuario)<8 || 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($validos, substr($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
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:

Código:
<?php
session_start();

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


if (strlen($usuario)<8 || 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($validos, substr($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);
?>