• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

93
Vistas
Evitar el acceso directo al archivo PHP usando AJAX

Quiero evitar el acceso directo a un determinado archivo PHP llamado prevented.php Mi lógica es que tengo un archivo principal, llamémoslo index.php y genera un token y lo almacena en una variable $_SESSION . También tengo otro archivo llamado def.php que se llama usando AJAX y pasa el token de index.php a def.php y si $_SESSION['token'] es igual a $_POST['token'] define un _DEFVAR y devuelve verdadero; de lo contrario, devuelve falso. Después de llamar a def.php y devuelve verdadero, redirijo a prevented.php a través de javascript usando location.href="prevented.php" . En la parte superior del archivo prevented.php hay un código que comprueba si el _DEFVAR está definido o no. Si no, muere con un mensaje como invalid ; de lo contrario, muestra el contenido del archivo prevented.php . Pero de alguna manera siempre recibo un mensaje invalid y no sé por qué. ¿Alguna idea de cómo llegar a prevented.php sin dirigir directamente la página?

Aquí está mi código:

index.php

 <?php $_SESSION["token"] = hash_hmac('sha256', "tokenString", "t2o0k0e0n3"); // Creates a hashed token ?> <script> $.ajax({ type: "POST", url: "def.php", data: { token: '<?php echo $_SESSION["token"]; ?>' }, cache: false, success: function(data) { console.log (data); if (data) { console.log (data + ' valid'); } else { console.log (data + ' invalid'); } location.href = "prevented.php"; }, error: function () { console.log('error'); } }); </script>

def.php

 <?php session_start(); if (!isset($_POST['token']) || $_POST['token'] != $_SESSION['token']) { echo false; die('invalid in def'); } else { define('_DEFVAR', 1); echo true; die ('valid in def'); } ?>

prevented.php

 <?php include "def.php"; if (defined('_DEFVAR')) { die ('valid in prevented'); // instead of this I would show the content of the page } else { die ('invalid in prevented'); } ?>
almost 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tu código es innecesariamente complicado. Si su intención es simplemente asegurarse de que los visitantes de protected.php hayan visitado primero index.php , entonces todo lo que necesita hacer es crear un indicador de sesión en uno y verificar su existencia en el otro. No hay necesidad de AJAX ni de formularios POST. El comportamiento innato de las sesiones de PHP ya le brinda esta funcionalidad.

índice.php:

 <?php session_start(); $_SESSION['flag'] = true; ?> <a href="protected.php">click here for the protected page</a>

protegido.php:

 <?php session_start(); if ($_SESSION['flag'] ?? false) { echo "you have previously visited index.php"; } else { echo "you have not previously visited index.php"; } ?>
almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda