Bonjour,

Je me documente sur les différentes façons possible de sécuriser un forumaire d'inscription.
(c.a.d éviter les robots)

J'ai vu qu'on a :

  • envoie un l'ien d'activation par e-mail
  • reCaptcha
  • répondre à un calcul

(et peut-être d'autres que je ne connais pas)

Mais ce sont des 'solutions' qui demandent un "effort" à l'utilisateur.
J'aimerai faire en sorte que cette sécurité anti-robots, se fasse de façon 100% transparante pour l'utilisateur,
pour qu'il n'ai vraiment RIEN à faire.

J'ai lu plusieurs articles sur internet,
beaucoup de pas très bons, ou pas très complet,
sauf celui-ci qui m'a bien plus :
http://www.e-systemes.com/live-blog/un-formulaire-web-anti-spam-sans-captcha-merci/1353/

Je résume ce qu'il propose :

Vérifier le REFERER

if ($_SERVER["HTTP_REFERER"] != "http://www.mondomaine.com/formulaire")
{
    // KO
}

Pas de code HTML ou de "http"

public function detectTags($mon_input)
{
    $test_html = preg_match("/<[^>]+>/", $mon_input);
    $test_tag= preg_match("/[[^>]+]/", $mon_input);
    $test_url = strstr($mon_input, "http://");

    if (($test_html || $test_tag) || $test_url )
    {
        // KO
    }
}

Honey Pot
3 champs cachés :

  • le 1er a une certaine valeur, et ne doit pas changer.
  • le 2ème est vide, et doit être rempli avec du javascript avec la valeur du 1er.
  • le 3ème est vide, et ne doit pas changer
    <input style="display:none;” type="text" id="test1" name="test1" value="hello">
    <input style="display:none;" type=“text" id="test2" name="test2" value="">
    <input style="display:none;" type=“text" id="email2" name="email2" value="">
    // En javascript (jQuery ici), on rempli le deuxieme champ avec la valeur du premier
    $( ‘#formContact’ ).submit(function() {
    $( '#test2' ).val($( '#test1' ).val());
    });
    // En PHP, test sur les valeurs de nos champs…
    if ((($_POST['test1'] != 'hello') ||
    ($_POST['comment2'] != 'hello')) ||
    ($_POST[‘email2’] != ''))
    {
    // KO
    }

Utiliser les SESSION (les robots ne les utilisent pas apparemment)

// Enregistrement en session
$test_val = md5(uniqid(microtime(), true));
$_SESSION[$form . '_test_val'] = $test_val;

// Dans le formulaire, la valeur à poster dans un champ
<input type="hidden" name="test_val" value="<?= $test_val ?>" />

// Test au traitement du formulaire
if (!isset($_SESSION[$form . '_test_val']) ||
    !isset($_POST['test_val']) ||
    $_SESSION[$form . '_test_val'] !== $_POST['test_val']))
{
    // KO
}

J'imagine que rien n'est jamais 100% fiable,
mais est-ce que vous pensez qu'avec ces quelques précautions, on peut considérer que l'inscription soit assez sécurisé ?

Je précise que le site que je construis sera pour un professionnel, patenté, sans employé.
Pas le genre de site qui a de très gros besoins de sécurité. Mais tout de même. (je ne veux pas non plus créer une passoire)

J'ai créé ce sujet pour essayer de recueuillir un maximum d'informations.
Avoir vos conseils en tout genre sur le sujet.

Par exemple,
sur les points que j'ai mentionné plus haut, il y en a un qui me dérange :
Le fait de remplir en javascript, la valeur d'un champ caché.
(si l'utilisateur a désactivé javascript, il sera considéré comme un robot (c'est dommage...). D'une façon générale, établir la sécurité en se basant sur du javascript ne me semble pas une bonne idée).

Voilà, si vous avez d'autres points de vue, avis, expérience là-dessus,
je suis preneur de toutes suggestions.

Merci à vous.

7 réponses


yanis-git
Réponse acceptée

J'ai une très bonne nouvelle pour toi, Google est actuellement en béta fermé pour un système de captcha Invisible.
https://www.google.com/recaptcha/intro/comingsoon/invisiblebeta.html

Soit patient

Bonjour.
Pour ce qui est de l'envoi de mail pour valider le compte, c'est quand même très important, car tu contrôles que l'adresse email appartient bien à l'utilisateur, ce qui est essentiel dans le cas par exemple où tu fais un système pour le mot de passe perdu, si l'utilisateur a renseigné une adresse email qui ne lui appartient pas, tu vas faire comment pour lui faire changer son mot de passe étant donné que tu n'auras aucun moyen pour le contacter ?
De plus, s'il y a un système de newsletter, l'utilisateur ne les recevra pas, c'est donc un point qui a plus d'impact que juste de s'assurer de la sécurité de l'inscription.
Pour ce qui concerne reCaptcha, maintenant il est beaucoup plus simple et rapide à utiliser qu'avant, l'utilisateur doit juste cocher une checkbox, ou au pire cliquer sur quelques images.
Concernant le calcul, je pense qu'il ne doit plus y avoir beaucoup de développeurs qui utilisent ce système.
Pour terminer, je pense que l'utilisateur aura au contraire l'impression que son compte n'est pas sécurisé s'il n'a rien à faire.
Je ne sais pas quel genre d'application tu dois faire pour ton client, mais à ce point là, autant ne pas faire de système d'inscription et laisser un libre accès aux utilisateurs.

SLK
Auteur

Salut Lartak !

par exemple où tu fais un système pour le mot de passe perdu

Ah oui c'est vrai, bien vu.

De plus, s'il y a un système de newsletter

Pour ce site ça ira, il n'y aura jamais de 'newsLetter'.

Pour ce qui concerne reCaptcha, maintenant il est beaucoup plus simple et rapide à utiliser qu'avant [...] ou au pire cliquer sur quelques images

Ah, effectivement si c'est ça, peut-être que ça ira.
Moi ce que je veux à tout prix éviter, c'est le système où tu dois recopier des caractères parfois illisible, je trouve ça tellement pénible xD

l'utilisateur doit juste cocher une checkbox

Hum... Ça n'a pas l'air d'être un reCaptcha ça non ? Ça ressemble à un Honey Pot ?
(Je ne sais pas, je demande)

je pense que l'utilisateur aura au contraire l'impression que son compte n'est pas sécurisé s'il n'a rien à faire.

Ah mais de toutes façons, intégrer ou non, un système de reCaptcha ou lien d'activation ou autres, ne joue pas sur la "sécurité" d'un compte utilisateur. C'est juste pour prémunir le site des éventuels robots.

Je ne sais pas quel genre d'application tu dois faire pour ton client, mais à ce point là, autant ne pas faire de système d'inscription et laisser un libre accès aux utilisateurs.

C'est vrai que c'est un peu ambiguë... ^^
Au début il fallait créer un compte obligatoirement,
mais le client m'a demandé de laisser les utilisateurs prendre rdv SANS compte (l'idée était de faciliter/simplifier pour les utilisateurs qui sont fatigués de créer des comptes).
C'est pas bête mais... Peut-être incompatible avec le système du site... Je vais y réfléchir et lui en parler.

J'avais pensé à un système où le bouton submit est placé au milieu d'une div, en détectant l'entrée de la souris dans la div, on active le bouton
mais ça ne marche pas sur mobile

SLK
Auteur

Coucou Huggy !

Ah c'est excellent ^^
Dommage pour le mobile, j'aimais bien l'idée.

Hum... Ça n'a pas l'air d'être un reCaptcha ça non ? Ça ressemble à un Honey Pot ?

Bien sûr que si, regardes : Google » reCAPTCHA.

SLK
Auteur

Google est actuellement en béta fermé pour un système de captcha Invisible

Oh puré !
Génial ^^
C'est parfaitement tout keske je voulais.

Bien sûr que si, regardes :

Ah ben... Oui ^^

Merci pour vos réponses.