Comment les Zoulous vous aident à déboguer vos applications web
La Problématique
Bien souvent les informations de debugging nécessitent qu’un flag soit positionné côté serveur, ce qui n’est pas pratique quand le produit est livré chez le client. Alors on peut bien positionner une paire variable=valeur dans l’URL, mais là encore ce n’est pas pratique, en particulier pour les requêtes XHR (Ajax) et POST. Alors oui, il y a bien les cookies, mais il faut savoir lequel prendre, avec quelles données, et penser à prendre le cookie avec soi quand on est en déplacement de support chez le client, ou bien le mettre sur son Google Drive, et espérer que le poste client sur lequel le placer ne sera pas en DMZ sans accès à Internet, bref…c’est plein d’incertitudes.
Une solution simple
Le zoulou. Ou plutôt la langue zoulou, langue que vous paramétrerez dans votre navigateur préféré en plus de votre langue préférée habituelle. Ainsi le header Accept-Language émis par votre navigateur au site web compliant sera par exemple de la forme :
Accept-Language: en-au,fr;q=0.7,zu;q=0.3
Il suffira alors de le détecter dans votre code pour lui faire afficher des informations non-visibles autrement.
Alors bien sûr, maintenant que j’ai posté ce sujet sur Internet, tout le monde est au courant. Ce n’est plus un secret. Vous l’aurez compris, retomber dans le secret n’est qu’à un pas du zoulou ! Il suffit de fabriquer une nouvelle chaîne de langues préférées plus custom cette fois, avec des caractères exotiques, zoulou peut-être d’ailleurs, pour vous réserver votre propre espace de nom sur la toile… e.g.
Accept-Language: fr;q=0.5,zumaisjeprefereuz123;q=0.5
Pour instruire à votre navigateur d’envoyer à chaque requête une chaîne Accept-Language personnalisée, vous devrez vous référer à la document de votre navigateur. Il y a suffisamment de littérature à ce sujet sur Internet pour que je ne le répète pas ici. Par contre je vais vous donner la méthode pour Firefox, car cette page me sert de propre pense-bête.
- Copier dans notepad ou autre votre chaîne actuelle Accept-Language. Il existe de nombreux moyens de l’identifier, la plus simple ici étant de votre connecter à l’URL common.tropicalm.net/whats-my-accept-language.php
- Ajoutez à votre navigateur le zoulou via Options > Contenu > Langues > Sélectionner, afin de préparer le terrain, et ce même si vous voulez quelque chose de moins devinable que zu.
- Connectez-vous ensuite à l’URL about:config dans Firefox
- Par clic-droit dans la fenêtre principale, créez une nouvelle chaîne general.acceptlanguage.override, avec comme valeur la chaîne copiée à l’étape 1, mais modifiée pour rendre zu plus compliquée à deviner. Par exemple zu123. Vous pourrez par la suite essayer des combinaisons de caractères plus évoluées et compliquées.
- Enregistrez vos changements et reconnectez-vous à l’URL common.tropicalm.net/whats-my-accept-language.php pour vérfier le travail.
Maintenant que vous avez préparé votre navigateur, il vous faut préparer le côté serveur, en ajoutant à votre code des points de contrôle, à votre gré, qui effectuent des actions étendues sur détection de ce langage exotique.
Evidemment cela dépendra du code utilisé. Je vais ici écrire en PHP des example de points de contrôle.
<?php
if (stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'],'zu123') !== false) die(FirePHP(<whatever>, TRUE));
if (stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'],'zu123') !== false) {
ini_set("display_errors",true);
error_reporting(E_ALL | E_STRICT);
}
?>
Extension générale du principe
Maintenant que vous connaissez le principe, votre limite sera tout simplement votre imagination. Il est possible de servir un contenu approprié à vos besoins sur simple détection d’une chaîne codée en dur dans ces points de contrôle. Si vous avez besoin de nombreux points de contrôle, pensez à factoriser ces points dans une fonction commune.Le principe sous-jacent ici est tout simplement : comment puis-je rendre mon client web unique, et comment puis-je rendre mon application web la serrure unique qui marchera avec cette clef unique qu’est devenu mon navigateur.