Hola a todos.....qisiera porfavor informacion sobre temas de seguridad de sesiones en PHP, osea la forma en q puedo hacer mas segura una sesion de usuario.......en una aplicacion q hic me di con la desdichada sorpresa q habia ingresado gente sin pasar el login , use el siguiente controlador de sesion pero claro no es suficiente:
<?php
session_start();
if($_SESSION['usuario']!='permitido'){
session_destroy();
@header('location:index.php');}
?>
ese controlador esta para las paginas a las q solo los usuarios puedn acceder previo logeo......lo q ocurre es q la pagina q programe tenia una sección de examens y en cada pagina salia el nombre del usuario...."Bienvenido Juan Perez has iniciado....etc" , y cuando el usuario daba su examen c guardaban sus nombres, contraseña, nota, fecha....pero habia registros d notas sin nombres ni contraseñas, solo la nota y la fecha como si lo hubiera dado un fantasma.....use el sgte script para validar la sesion:
<?php
include("conexionBD.php");
conectarse();//funcion q me concta a la BD
//***********************
$codUsu=$_POST['codigo'];
$dni=$_POST['dni'];
$nivel=$_POST['nivel'];
session_start();
$sql="select * from usuarios where clave='".$codUsu."' and dni='".$dni."' and nivel='".$nivel."'";
$rs=mysql_query($sql);
@$row=mysql_num_rows($rs);
if($row==1)// es dcir q existe tal registro
{ $_SESSION['usuario']='permitido';
@header('location:menu_usu.php');
$_SESSION['apellidos'] = mysql_result($rs,0,2);
$_SESSION['nombres'] = mysql_result($rs,0,3);
$_SESSION['nivel'] =$nivel;
$_SESSION['dni'] =$dni;
$_SESSION['codUsu'] =$codUsu;
$_SESSION['hora']=date('H:i');
}
else { session_destroy();
@header('location:loginUsu.php');
}
?>
por favor q otras herramientas puedo usar para q la sesion sea segura y no vulnerable
Les agradeceria mucho su ayuda
por de pronto evitar la inyección sql tan gorda que te pueden hacer ya que recibir por POST no copruebas los datos.
Create una funcioncita o pasale los magic_quotes para comprobar los datos que te llegan
con poner % o * mismamente te la meten doblada
hmm suena interesante.....pero algun ejemplo ^^' ...osea pueden vulnerarme poniendo % o * en los campos....como.?.al principio , al final........gracias x la respuesta...
veamos...xD
si envian los campos con valores...
$codUsu=%%
$dni=%%
$nivel=%%
o algun campo del que solo sepan que existe un dato sin saber el resto y haciendo combinaciones podría salir...
no le dedico más tiempo pero seguro que la comilla final se podría manipular para añadir un limit 1 al campo nivel xD
como adivinar los campos y demás?
enviando consultas erroneas y mirar si lanza algun error xD