Foros del Web » Programando para Internet » PHP »

seguridad de accesos con $_SESSION

Estas en el tema de seguridad de accesos con $_SESSION en el foro de PHP en Foros del Web. Hola tengo una duda. Tengo un script para manejar permisos de usuario al principio de mis paginas de la siguiente manera: Código PHP: @ session_start ...
  #1 (permalink)  
Antiguo 19/02/2013, 20:12
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
seguridad de accesos con $_SESSION

Hola tengo una duda. Tengo un script para manejar permisos de usuario al principio de mis paginas de la siguiente manera:

Código PHP:
@session_start();
if ( isset(
$_SESSION["rut"]) and $_SESSION["Autenticado"]=="Si" and $_SESSION["id_tipo"]==1){
}else{
@
header('Location: login.php');

Y luego de eso vendria todo el resto de codigo de la pagina. La primera condicion funciona bien isset($_SESSION["rut"]) , la segunda condicion tambien sin ningun problema $_SESSION["Autenticado"]=="Si" pero la tercera no me la toma, es decir entro con un usuario con $_SESSION["id_tipo"]==2 e igual me muestra la pagina y no me redirecciona que es lo que busco hacer si no cumple una de las tres condiciones. Que estare haciendo mal??

PD: he revisado en el login donde se genera la sesion y esta correcto, es decir no es un error de escritura, ademas uso la condicion de los id_tipos en varias partes de la pagina para ocultar o mostrar elementos dependiendo del usuario y funciona perfecto. Sera algo relacionado con la forma de hacer la condicion? por lo menos yo no le veo nada malo
  #2 (permalink)  
Antiguo 19/02/2013, 22:15
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: seguridad de accesos con $_SESSION

Hola que tal.

y por que colocas el @, recuerda que ese signo esconde todos los errores posibles en tu código.

prueba si realmente existe esa variable de sesión con var_dump o var_export pueba y comentas.

Código PHP:

<?php

session_start
();
var_export$_SESSION );
 
if ( isset(
$_SESSION["rut"]) and ($_SESSION["Autenticado"] == "Si") and ( $_SESSION["id_tipo"] == 1) )


}
else

    
header('Location: login.php'); 
}  


?>
Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 19/02/2013, 22:46
 
Fecha de Ingreso: mayo-2012
Ubicación: República Dominicana
Mensajes: 37
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: seguridad de accesos con $_SESSION

Trata reemplazando "and" por "&&".
Saludos ;)
  #4 (permalink)  
Antiguo 20/02/2013, 18:17
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 2 meses
Puntos: 4
Respuesta: seguridad de accesos con $_SESSION

Cita:
Trata reemplazando "and" por "&&".
Era la solucion kapo te pasaste... ahora me gustaria saber por que no me tomaba los "and"

Cita:
y por que colocas el @, recuerda que ese signo esconde todos los errores posibles en tu código.
No tenia idea de eso, yo aprendi esta forma en la universidad, gracias por la aclaracion... ahora me gustaria saber que gano con sacarle los @

Gracias a ambos
  #5 (permalink)  
Antiguo 21/02/2013, 02:30
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: seguridad de accesos con $_SESSION

Ganas que si hay errores se mostrarán, y de la otra forma quizá se estén produciendo errores y ni te enteres.

Eso sí, para producción mejor desactivar los errores, pero para eso modificando el fichero php.ini
  #6 (permalink)  
Antiguo 21/02/2013, 08:32
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: seguridad de accesos con $_SESSION

Cita:
Los operadores and y && y los operadores or y || no son completamente equivalentes, ya que no tienen la misma precedencia. Concretamente, && y || tienen mayor prioridad que and y or. Como además el operador de asignación = tiene una prioridad intermedia, se pueden producir situaciones inesperadas, como muestran los siguientes ejemplos.
El ejemplo siguiente muestra el resultado esperado:
Código PHP:
Ver original
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = $var1 && $var2;
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9.  
  10. //Imprime falso

Cita:
La variable $todo sólo tomaría el valor TRUE si tanto $var1 como $var2 fueran TRUE, pero como $var2 es FALSE, $todo toma el valor FALSE.
Sin embargo si se utiliza el operador and en vez de &&, el resultado no es el esperado:
Código PHP:
Ver original
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = $var1 and $var2;
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9. //Imprime verdadero

Cita:
¿Por qué se produce ese resultado? Porque el operador de asignación = tiene precedencia sobre el operador and. Eso quiere decir que PHP realiza antes la asignación que la operación lógica, es decir, como si la expresión estuviese escrita así:
Código PHP:
Ver original
  1. ($todo = $var1) and $var2; //verdadero

Cita:
En esa expresión, la variable $todo almacena el valor de la variable $var1 (TRUE), por lo que $todo toma el valor TRUE. La operación lógica and no modifica el valor de $todo.
Si se quiere obtener el mismo resultado con and que con &&, se deben utilizar paréntesis, para forzar que la operación lógica and se realice antes de la asignación:
Código PHP:
Ver original
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = ($var1 and $var2);
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9. //Imprime falso

Información sacada de esta Fuente

Espero que te sirva

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 21/02/2013, 08:51
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: seguridad de accesos con $_SESSION

Cita:
Iniciado por jonni09lo Ver Mensaje
Código PHP:
Ver original
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = $var1 && $var2;
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9.  
  10. //Imprime falso



Código PHP:
Ver original
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = $var1 and $var2;
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9. //Imprime verdadero



Código PHP:
Ver original
  1. ($todo = $var1) and $var2; //verdadero



Código PHP:
Ver original
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = ($var1 and $var2);
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9. //Imprime falso

Información sacada de esta [URL="http://www.mclibre.org/consultar/php/lecciones/php_operaciones_logicas.html"]Fuente[/URL]

Espero que te sirva

Saludos
Muy buen dato, realmente no lo sabía.. por suerte siempre uso los operadores && y ||, pero la verdad que es algo para tener en cuenta ya que puede ocasionar cosas inesperadas en la logica de los procesos.

Etiquetas: seguridad, session
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:33.