Pues no te entendí pero creo que te entendí
Según lo que he entendido, crees que seria lo mismo porque las 2 se llamarían desde el mismo archivo.
No. La función para comprobarlo estará en el archivo padre, pero la de generarlo estará en el que solicita la acción.
Y cada vez que necesites hacer una acción tendras que mandar el token también. Asi te evitas el mal uso.
Te explico.
Tenemos 2 archivos.
Digamos que
jbb.php es el que procesa la informacion que envias mediante
ajax desde ajax.php por ejemplo.
en jbb.php al principio tendrias algo asi:
if(!comprobar_token($_POST['token'])){
die('El token no es valido, utilice nuestra web y no acceda diractamente.'); }
Esto me imagino, que sabes, que lo que hace seria llamar la función comprobar_token con el POST 'token',
Bueno y imaginemos que el ajax.php tendra algo asi al principio.
<?php
$token = generar_token();
?>
Entonces, tu cada vez que envíes algo por ajax hacia jbb.php, tendrás que incluir la variable $token como parámetro(post).
Ejemplo total:
Archivo jbb.php (el que procesa)
<?php
function comprobar_token($token){
// Comprobar si la session esta inicida.
if(!isset($_SESSION['token'])){ return false;
}
// Comprobar si es el mismo que tenemos
// nosotros guardado.
if($token==$_SESSION['token']){
// si es valido devolver true;
return true;
} else {
// si no es valido, devolver false
return false;
}
}
// Si comprobar_token(..) devuelve false, morir.
if(!comprobar_token(@$_POST['token'])){
die('El token no es valido, utilice nuestra web y no acceda diractamente.'); }
// Tu codigo
// ejemplo:
echo 'Holaaaa usuario: '.$_POST['nombre'];
?>
Archivo ajax.php (el que pide)
<?php
function generar_token(){
@session_start();
$token = md5(mt_rand(11,99999));
$_SESSION['token'] = $token;
return $token;
}
$token = generar_token();
?>
<!-- Yo utilizare jquery porque es mas facil xD -->
<script src="http://code.jquery.com/jquery-1.7.1.min.js" ></script>
<!-- Llamar jbb.php con parametros -->
$(document).ready(function() {
$("#formulario").submit(function(e){
e.preventDefault();
$.post("jbb.php", $("#formulario").serialize(),function(data) {
alert(data)});
});
});
<form id="formulario" action="jbb.php" method="POST"> <input type="text" name="nombre"/> <!-- Importante, meter el token como campo oculto -->
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="submit" nombre="enviar" value="Comprobar" />
Asi, si llamamos directamente al archivo jbb.php te devolverá esto:
El token no es valido, utilice nuestra web y no acceda directamente.
Y si lo llamas sin el campo token también xD
Saludos