blogotext icon indicating copy to clipboard operation
blogotext copied to clipboard

About the captcha

Open remrem opened this issue 7 years ago • 21 comments

The captcha system used in comment submission (form + test) must be more independent from the core. The purpose is to allow addons to use it and to integrate in others forms easily.

remrem avatar Jan 31 '18 14:01 remrem

I think documenting the use of captcha might be enough :

  • When inc/boot.php is included, a new captcha is computed. You can access to the following variables :
    • $GLOBALS['captcha']['y'] and $GLOBALS['captcha']['x'], the two numbers to add
    • $GLOBALS['captcha']['hash']
  • Pass one of the integer to en_lettres function to turn it into a word. i.e en_lettres($GLOBALS['captcha']['y'])
  • send the form. Note that token can be included hidden with hidden_input function. i.e hidden_input('a_contact_token', $GLOBALS['captcha']['hash'])
  • To check the result of the captcha, compare the token to the results send passed to sha1 function. It requires to know the user agent :
$ua = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
if ($datas['token'] != sha1($ua.$datas['captcha'])) {
    // error
}

In short :

The form :

 $html .= '<p><label>'.$GLOBALS['lang']['label_dp_captcha'].'<b>'.en_lettres($GLOBALS['captcha']['x']).'</b> &#x0002B; <b>'.en_lettres($GLOBALS['captcha']['y']).'</b>';
    $html .= '<input type="number" name="a_contact_captcha" autocomplete="off" value="" class="text" type="int"/></label></p>';
    $html .= hidden_input('a_contact_token', $GLOBALS['captcha']['hash']);

The check of POST :

$datas['captcha'] = filter_input(INPUT_POST, 'a_contact_captcha', FILTER_SANITIZE_SPECIAL_CHARS);
$datas['token'] = filter_input(INPUT_POST, 'a_contact_token', FILTER_SANITIZE_SPECIAL_CHARS);
$ua = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
if ($datas['token'] != sha1($ua.$datas['captcha'])) {
// error ! 
}

B4rb3rouss avatar Feb 01 '18 12:02 B4rb3rouss

Tu es chaud pour porter ta doc sur le wiki ? https://github.com/BlogoText/blogotext/wiki. :D

Juste une chose, pour la doc, utilise soit des noms générique : hidden_input('a_contact_token', $GLOBALS['captcha']['hash']) devient hidden_input('your_input_name', $GLOBALS['captcha']['hash'])

Je ne sais pas si tu peux créer une page, au pire je te la crée.

Je vais quand même voir pour améliorer un peu le captcha pour que ça soit plus facile d'intégrer les outils de sécurité (token et captcha)

remrem avatar Feb 01 '18 12:02 remrem

+1, on peut peut-être avoir des fonctions facilitantes (Il y en a bien pour "hidden_input")

J'ai bien l'impression que je peux créer des pages sur le wiki. Oui, je suis chaud pour le compléter, ça je sais mieux faire que du PHP ;)

B4rb3rouss avatar Feb 02 '18 12:02 B4rb3rouss

Une fonction pour vérifier le hash sha1 par exemple serait pas mal ;)

B4rb3rouss avatar Feb 02 '18 12:02 B4rb3rouss

Pour le wiki, fait toi plaisir ;)

  • N'oublie pas d'ajouter ta page dans la home du wiki
  • J'essaye de mettre la langue dans le nom de la page [FR] le titre / [EN] the title

Je pense bricoler 2 fonctions genre captcha_form() qui retournera le code HTML et captcha_check() pour vérifier la réponse qui retournera du booléen.

remrem avatar Feb 02 '18 12:02 remrem

Et voilà la version FR : https://github.com/BlogoText/blogotext/wiki/%5BFR%5D-Ajouter-un-captcha-(addons)

je me colle a la versoin [EN] ce week-end quand j'ai plus de temps.

B4rb3rouss avatar Feb 02 '18 12:02 B4rb3rouss

and voilà

B4rb3rouss avatar Feb 03 '18 12:02 B4rb3rouss

Du coup, tu veux que je m'occupe de captcha_form() et captcha_check()? Ça devrait être dans mes cordes si ça peut aider...

B4rb3rouss avatar Mar 13 '18 12:03 B4rb3rouss

Yep, tu peux :) de mon côté ça commence à revenir à la normale, du coup je serais plus présent assez rapidement :D

remrem avatar Mar 15 '18 07:03 remrem

Yep, tu peux :)

D'ac', je m'en occupe ces prochains jours.

de mon côté ça commence à revenir à la normale, du coup je serais plus présent assez rapidement :D

aaah, ça fait plaisir à mon petit coeur ;)

B4rb3rouss avatar Mar 15 '18 08:03 B4rb3rouss

Voilà https://github.com/BlogoText/blogotext/pull/366 . Pas sûr que ça apporte énormément, mais ça sera au moins un poil plus simple pour les addons. Si ça te va, je modifierai le wiki en conséquence.

J'en profite pour remarquer qu'il y a des fonctions qui affichent des formulaires dans util.php au lieu d'être dans form.php.

B4rb3rouss avatar Mar 15 '18 20:03 B4rb3rouss

Je pense que tu n'as pas synchro ta branche avant ton commit, du coup ça fait sauter le fichier sitemap.php.

Pour l'emplacement des fonctions, yep, il y a quelques incohérences, à voir ça lors du freeze 3.8...

remrem avatar Mar 17 '18 08:03 remrem

Ben si pourtant j'ai fait comme d'habitude 😖 . Je ne vois pas comme il a pu disparaître, c'est bien la branche dev que j'ai récupéré.

B4rb3rouss avatar Mar 18 '18 09:03 B4rb3rouss

Là je bloque, j'ignore pourquoi la branche dev est incomplète dans ma copie... J'ai tout bien suivi : git pull upstream dev et tout et tout...

B4rb3rouss avatar Mar 18 '18 11:03 B4rb3rouss

tu te positionnes bien dans ta branche dev (ou autre nom) git checkout dev avant de faire l'upstream ?

remrem avatar Mar 19 '18 22:03 remrem

Eh bien oui... Je vais reprendre mon dépôt à zero... Tu peux chourer le diff en attendant, peu m'importe qu'il porte mon nom ;)

B4rb3rouss avatar Mar 20 '18 08:03 B4rb3rouss

Bah je ne sais pas ce qui cloche.... :/ Reprend les modifications au propre de ton côté, il n'y a pas beaucoup de code ça va aller vite ;)

remrem avatar Mar 20 '18 09:03 remrem

C'est résolu. J'ai dû faire un git checkout upstream/dev sitemap.php sur ma branche dev, le fichier n'avait jamais été récupéré 😖 Pourtant, je fais à chaque fois

git pull origin dev
git pull upstream dev

J'espère maintenant avoir bien tout...

B4rb3rouss avatar Mar 20 '18 16:03 B4rb3rouss

:)

remrem avatar Mar 20 '18 18:03 remrem

J'hésite à refaire l'addon contact du coup...

ps : en fait non, y a des ajouts importants, inaccessibles avec les fonctions captcha_form, à moins d'intégrer aussi les $random_ids

B4rb3rouss avatar Mar 20 '18 20:03 B4rb3rouss

de mémoire, le système de captcha actuel encapsule le <input> dans le <label> histoire de ne pas gérer la liaison entre les attributs id => for, ont peux revoir ça pour la 3.8 histoire de séparer les deux et de générer un id random.

remrem avatar Mar 21 '18 10:03 remrem