Pregunta

Esta es una aplicación de motor de prueba con 5 artículos configurados por mí... como 5 páginas php

Flujo de la aplicación

Iniciar sesión.html

check.php // para comprobar si las credenciales son correctas

si es correcto entonces

main.php //el usuario hace clic en "realizar el examen" en esta página que le muestra 1 de los 5 trabajos...

pero una vez que haya iniciado sesión, puedo cambiar la URL a la URL del examen que quiero... los nombres del examen r 1.php 2.php...

Cómo paro esto...??

if(!isset($_SESSION['page'])//Tp
        continue;           //Tp
else
 {
   header('Location:login.php');
   exit;
 }                               //Tp
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];//tp

¿Es esto correcto... como dije, hay 5 páginas...?

en cada página tengo este código....

Compruebo si la variable de sesión está configurada ... si está configurada ... significa que ya ha visitado la página ... pero este código no funciona ... ¿Usé la variable _session ['página' ] antes de declararlo ???

¿Fue útil?

Solución

La mayoría de los problemas que tiene podrían resolverse organizando su código en torno a un script de controlador predeterminado.(consulte mis pautas a continuación).

Hay dos formas básicas de pasar información a dicho script (como dije en un comentario anterior).La forma básica es a través de una variable GET, como http://www.example.com/main.php?p=1.

Si desea tener URL más amigables para los visitantes, puede usar un RewriteRule en un .htaccess archivo para convertir las URL agradables en URL que su controlador entenderá.(Necesitarás mod_reescritura activado.)

Esto puede ser excesivo para esta pregunta en particular, pero aquí hay algunas pautas para aplicaciones web seguras.Creo que todos son relevantes:

  1. Pon tu información sensible fuera de la raíz web pública.
  2. De forma predeterminada, no muestra ninguna información..Sólo habilite la visualización de información si el usuario está autorizado positivamente.
  3. Idealmente, esto incluye las URL (si escriben una URL válida pero no están autorizados, no les informe que han llegado a una URL válida).Una forma es redirigir (establecer el encabezado de ubicación como lo estaba haciendo) a la página de inicio de sesión si no están autorizados.
  4. Cree un script de controlador predeterminado. Este script central incluirá todos los archivos necesarios y llamará a todas las funciones necesarias.Pase toda la información de la solicitud a este controlador y haga que genere todo el HTML.
  5. Requisito para el n.° 3: Encapsula tu código en funciones y clases.De esa manera, su controlador predeterminado puede llamarlos cuando esté listo, solo si los necesita y no simplemente porque estén incluidos.Esto le permite mucho más control sobre el flujo de su aplicación.
  6. En lugar de echoing HTML en lugares aleatorios a lo largo de su código, devolver toda la salida HTML a su controlador principal, que lo recopilará y lo enviará todo en un solo lugar cuando esté listo.Aleatorio echoLos elementos dispersos facilitan la aparición de agujeros de seguridad.
  7. No confíes en la entrada del usuario.Si vas a utilizar un valor que obtienes de $_GET o $_POST, ASEGÚRESE de que sea un valor válido antes de usarlo.

Editar:

(Esto es más específico y está dirigido a su código tal como está ahora)

Hay Tres razones por las que tu código no se ejecutará como esperas:

  1. Dejaste un paréntesis de cierre en la primera línea. if(!isset($_SESSION['page']).

  2. La forma en que está escrito su código, si $_SESSION['page'] ya está configurado cuando el usuario visita la página, será redirigido a la página de inicio de sesión.Puedes solucionar esto poniendo el header('Location:login.php'); exit; en el if cláusula y eliminar la else cláusula completamente:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. Necesitas configurar $_SESSION['page'] cuando inician sesión por primera vez para que puedan ver la primera página.

Recomiendo usar un número entero para $_SESSION['page'] en lugar del nombre del script.De esa manera, puedes configurar $_SESSION['page'] a 1 cuando inician sesión, y cada vez que ven una página con éxito, incrementa $_SESSION['page'] por uno.Considerar $_SESSION['page'] significar el siguiente documento que este usuario puede ver.

Puedes establecer un $pageid en cada papel.Cada vez que intentan ver una página, si $_SESSION['page'] es menos que $pageid, no les dejes ver la página.

Otros consejos

La mejor forma de hacerlo es construir una verdadera autenticación y autorización en su aplicación. A continuación, la URL que sirve a las necesidades de papel para verificar que el usuario tiene permiso para ver la página antes de servirlo.

Lo que usted está haciendo en check.php, hacerlo en la página de papel en sí.

Un montón de alternativas. Un par:

  • no codifican el nombre de los nombres de papel en la URL, pero regresar el contenido del documento seleccionado de una página llamada, por ejemplo, los ensayos de paper.php.

  • seguimiento de los documentos que el usuario tiene derecho a ver en la sesión del usuario. Compruebe en cada página de papel de prueba si el usuario tiene permiso para ver éste y devolver un 403 Forbidden (o una página de error) si no lo son.

Muchos más, estoy seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top