digital-nation

bloc-note d'un informaticien procrastinate...

Information importante : le blog n'est plus mis à jour. Il a été déménagé vers la plateforme My.Opera à l'adresse suivante : http://my.opera.com/groumphy. N'oubliez pas de mettre à jour vos favoris et RSS.

Captcha

Posté le mardi, 18 juillet, 2006

Un test de Turing en javascript

La propagation des spams, ou trackback indésirable, se fait pléthore sur le web actuellement que les plus grands ferment bien souvent ces derniers ou modèrent via des plugins spéciaux les premiers. D'autres se lancent dans le test de la véritable identité par un Captcha (petit test de Turing très simple).

Malheureusement bien souvent ceux-ci se font en PHP. Hors, parfois certaines personnes ne s'y connaissent pas dans ce langage, ou ne peuvent le mettre en route sur le blog qu'ils ont choisis. Pour vous alors il existe des solutions : le javascript.

Voici donc un petit script sympathique qui permet de faire un test de Turing sur un simple formulaire.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Test Captcha</title>

<script language="javascript1.2" type="text/javascript">

/*

Nom de la fonction : captcha

Description : test de Turing en Javascript

Auteur : Groumphy

Modification :

Version : 1.0.1

Licence : GNU GPL

*/

// dclaration des variables au niveau du scope global

// cela permet de réutiliser les différentes variables dans les fonctions autres...

var i, z, r;

function captcha() { // déclaration du nom de la fonction

i = new Array; // dclaration d'une zone de mémoire pour stockage des renseignements

// je structure ma zone mmoire de la manière suivante :

// test|reponse

// où test représente le test d'exétion

// où réponse correspond au résultat du test d'exécution

// Rappel : si utilisation d'accent, n'oublions pas la neutralisation du caractère par le backslash.

// l'utilisation de la zone mmoire se fait de la manière suivante :

// i[x] = "test|reponse";

// x est le nombre entier directement supérieur à la dernière ligne d'utilisation de la zone mémoire

i[0] = "4 * 2|8";

i[1] = "1 + 1|2";

i[2] = "3 * 1|3";

i[3] = "9 - 2|7";

// Sélection d'un test de Turing au hasard via l'object Math et la méthode Ramdom

z = Math.round(Math.random() * (i.length - 1));

// Séparation du test et de la réponse par la méthode Split

// on en déduit que r[0] est la question et r[1] est la réponse

// je poserais donc ma question dans cette fonction et la réponse servira dans la fonction verifForm

// d'où l'utilité de poster dans le scope global les variables

r = (i[z]).split("|");

// Définition d'une phrase spécifique pour introduire le test de Turing :

var l; l = "quel est le résultat de ";

// Ecriture du test de Turing

document.write(l + r[0]); }

function verifForm() {

// Capture de la valeur de l'Input Captcha via document.forms.elements.value

var u; u = document.forms['NomDuFormulaire'].elements['captcha'].value;

// début des structures conditionnelles pour vérifier la réponse

// si la réponse est différente du résultat du test différente de r[1] ou le résultat est vide,

// j'affiche un message d'erreur indiquant que ce n'est pas correct

if((u != r[1])||(u = '')) {

// action à réaliser si l'action n'est pas correcte

// ici ce n'est qu'un simple message, et par facilité j'indique aussi la réponse... Pourquoi pas :-)

alert('La réponse est non correcte. La réponse est : ' + r[1]); }

// action à réaliser si l'action est correcte

// ici ce n'est qu'un simple message

else { alert('La réponse est correcte.'); } }

</script>

</head>

<body>

<h1>Test de Turing (Captcha)</h1>

<form method="post" action="" id="NomDuFormulaire" name="NomDuFormulaire" onsubmit="javascript: return verifForm();">

<label>Captcha :

<script language="javascript1.4" type="text/javascript">

captcha();</script>

</label>

<noscript>

<p>Votre navigateur n'a pas le javascript activé.

Cela empèche l'utilisation complète du test de Turing.

Cependant, si une action PHP est dans le 'post' du formulaire, il serait intéressant de faire un test très basique dans le style de recopier 0000 dans l'INPUT adéquat...</p>

</noscript><br>

<input type="text" id="captcha" name="captcha" maxlength="10" value="">

<input type="submit" name="command" value="Tester">

</form>

</body>

</html>

Je pense que la source est suffisament commentée pour se passer de tout autre commentaire de ne pas oublier que le Javascript est un langage client et donc uniquement interprété par le navigateur du visiteur si ce dernier à laissé l'option active.

  • Ce billet est dans la catégorie ouai B et a été écrit par Groumphy

Je soutiens l'action Irrépressible.be !