# Rejeu de formulaires

## Présentation

Le rejeu de formulaire permet d'ouvrir une session dans une application protégée par un formulaire POST sans rien demander à l'utilisateur.

Ce type de mécanisme SSO n'est pas parfait et peut générer des problèmes tels des blocages de mots-de-passe, sessions locales mal closes, etc...

Il est en général préférable de trouver une autre solution pour protéger les applications avec LL::NG. Ainsi, vérifier si l'application est connue ou essayer d'adapter le code source.

En configurant le rejeu de formulaire avec LL::NG, le handler détecte les formulaires à remplir, ajoute un petit javascript dans la page HTML pour préparer les champs avec de fausses données et les soumettre, le handler intercepte la requête POST et insère les bonnes données dans le corps de la requête.

Les données postées peuvent être des valeurs statiques ou calculées à partir des données de session de l'utilisateur.

Pour envoyer le mot-de-passe utilisateur, il faut activer le stockage du mot-de-passe. Dans ce cas, la variable `$_password` peut être utilisée dans tous les champs à envoyer.

## Configuration

You should grab information:

- L'URI de la page qui contient le formulaire
- L'URI vers laquelle le formulaire est envoyé
- La page charge-elle jQuery ? Sinon, indiquer une URL jQuery joignable par l'utilisateur (toute version supérieure à 1.0)
- y-a-t-il pluseurs formulaires HTML dans la page ? Si oui, donner un sélecteur à jQuery identifiant le bon formulaire
- l'utilsiateur doit-il cliquer sur un bouton, par exemple pour déclencher un script ? Si oui, donner un sélecteur à jQuery pour identifier ce bouton
- noms and valeurs des champs à contrôler

Si vous ne connaissez pas les sélecteurs jQuery, sachez juste qu'ils sont similaires aux sélecteurs CSS : par exemple, button#foo pointe sur le bouton dont l'« id » est « foo », and « .bar » identifie tous les éléments HTML de la classe “bar”.

Par exemple :

- URI de la page de formulaire : /login.php
- URI cible : /process.php (en laissant ce paramètre vide, l'URI cible est supposée être la même que celle du formulaire)
- URL jQuery : http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js (si ce paramètre est vide, jQuery est supposé être déjà chargé ; on peut aussi mettre `default` pour pointer vers l'URL jQuery du portail LL::NG)
- Sélecteur de formulaire jQuery : #loginForm (si vide, le navigateur prendra un formulaire de la page)
- Sélecteur du bouton jQuery : button.validate (si vide, le formulaire sera soumis sans éulation d'un clic de bouton ; si mis à “none”, aucun clic ne sera émulé et le formulaire sera renseigné mais pas soumis)
- Champs :
  - postuid: $uid
  - postmail: $mail
  - poststatic: 'static'

Aller dans le manager, “Hôtes virtuels” » virtualhost » “Rejeu de formulaires” et cliquer sur “Nouveau rejeu”.

Renseigner les valeurs ici :

- URL du formulaire: /login.php
- URL cible : /process.php
- URL jQuery : http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
- Sélecteur de formulaire jQuery : #loginForm
- Sélecteur de bouton jQuery : button.validate

Cliquer ensuite sur `Nouvelle variable` et ajouter toutes les noms de champ et leurs valeurs, par exemple:

Il est possible de définir plusieurs URL de rejeu de formulaires par hôte virtuel.