Empêcher l’accès à une page request

L’Ajax permet notamment de récupérer des résultats à travers des pages request.

Si cela offre de chouettes possibilités comme avec la fonction autocomplete de jQuery, il est intéressant d’empêcher l’accès directe à une page request ne serais-ce que pour une question esthétique.

Techniquement ce ne serait pas chose faisable car les accès Ajax se font un peu comme si un navigateur accédait directement à une page (malgré que cela ne se voie pas à l’écran).

Toutefois, le code suivant placé en début de page permet d’afficher un message et de restreindre lorsqu’un accès directe se produit.

<?php
if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest'){ // Ajax
  echo("Accès directe non autorisé");
    die();
}
 
// Code PHP

Cette astuce n’est pas 100% fiable et $_SERVER ne fait pas officiellement partie du standard PHP. Ceci dit la plupart des frameworks renvoient une valeur X-Requested-With.

En complément, une solution simple est de passer directement un flag en POST ou GET lors des accès.

– James Poulson.