Protection CRSF - Conformité des plugins

Information : CRSF (Wikipedia)

Ajout du token de sécurité

Afin que le token de sécurité soit présent sur tous les formulaires et ce, quel que soit l'endroit (/front, /inc ou autre), il faut utiliser, à la place de la balise de fermeture de formulaire </form>

Html::closeForm();

Exemple : appliances commit 191

Toutes les actions en POST

La protection CRSF n'est applicable que pour les méthodes POST, donc :
  • Aucun formulaire d'action (modification, suppression, ajout, ...) avec method="get". Ne sont donc pas concernés les formulaires d'affichage ou de navigation.
  • Aucune action de modification ne doit être déclenchée par un lien

Il est possible de remplacer rapidement les liens par un formulaire créer spécialement : showMinimalForm(URL, nom du bouton, libellé du bouton, tableau champ nom => valeur, options du bouton (confirmation par exemple))

echo "<a href="front/foo.php?delete=1&id=15>'Supprimer'</a>";

Devient
Html::showSimpleForm("front/foo.php", "delete", "Supprimer", array('id'=>15));

Exemple : appliances commit 192

Version minimum de GLPI

L'utilisation des nouvelles méthodes (closeForm, showMinimalForm, ...) impose GLPI >= 0.83.3

Exemple : appliances commit 191

Déclaration de la conformité au coeur

Lorsque toutes les corrections sont réalisées, déclarer le hook crsf_compliant.

$PLUGIN_HOOKS['csrf_compliant']['appliances'] = true;

Exemple : appliances commit 193

IMPORTANT : il est indispensable d'ajouter cette déclaration dans le setup même si le plugin d'utilise aucun formulaire. Sinon le plugin est considéré non compatible.

En 0.83.3 : lorsqu'un seul plugin n'est pas conforme, la protection totale de tout GLPI (core et plugins) est désactivée.
En 0.84 : en discussion