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*.
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);
?>
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)<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);
?>
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.
xk mysqli?¿ y si tengo un proyecto echo en mysql que pasaria¿?
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.
es decir que tendria que cambiar de mysql todas mysql_connect,mysql_select_db, etc dices¿¿¿?
Sip,
http://www.php.net/manual/es/mysqlinfo.api.choosing.php
tu con cual trabajas¿? y los archivos php.ini etc, actuan bien¿?
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:
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.
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)<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);
?>