• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

94
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error