Fonctionnement des actions sécurisées

L’utilisation d’actions sécurisées se passe en deux temps. Il faut d’abord générer un lien avec la clé de sécurité, puis lorsque l’utilisateur clique sur l’action, qui va exécuter une fonction d’un fichier dans le répertoire action/, il faut vérifier la clé.

La fonction securiser_action()

Cette fonction securiser_action, dans le fichier ecrire/inc/securiser_action.php, crée ou vérifie une action. Lors d’une création, en fonction de l’argument $mode, elle créera une URL, un formulaire, ou retournera simplement un tableau avec les paramètres demandés et la clé générée. Lors d’une vérification, elle compare les éléments soumis par GET (URL) ou POST (formulaire) et tue le script avec un message d’erreur et exit si la clé ne correspond pas à l’auteur actuel.

Génerer une clé

Pour générer une clé, il faut appeler la fonction avec les paramètres corrects :

$securiser_action = charger_fonction('securiser_action', 'inc');
$securiser_action($action, $arg, $redirect, $mode);

Ces quatre paramètres sont les principaux utilisés :

  • $action est le nom du fichier d’action et de l’action correspondante (action/nom.php et fonction associée action_nom_dist())
  • $arg est un argument transmis, par exemple supprimer/article/3 qui servira entre autre à générer la clé de sécurité.
  • $redirect est une URL sur laquelle se rendre une fois l’action réalisée.
  • $mode indique ce qui doit être retourné :
    • false : une URL
    • -1 : un tableau des paramètres
    • un contenu texte : un formulaire à soumettre (le contenu est alors ajouté dans le formulaire)

Dans une action, vérifier et récupérer l’argument

Dans une fonction d’action (action_nom_dist()), on vérifie la sécurité en appelant la fonction sans argument. Elle retourne l’argument (sinon affiche une erreur et tue le script) :

$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
// a partir d'ici, nous savons que l'auteur est bien le bon !

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français, Nederlands