Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Les Langages Du Web _ Une expression régulière dans mon formulaire...

Écrit par : Ducace 10 May 2018, 15:43

Salut à tous,

j'ai mis en ligne récemment un site avec une extension .vet qui contient un formulaire.

Je reçois quelques spams chaque jour "message du site xyz.vet" remplis avec nom, adresse mail et commentaires.

Après quelques essais infructueux, j'ai finalement placé un captcha google. "Je ne suis pas un robot".
Mais malgré ça, je reçois encore ces soumissions.

Elles viennent de Russie. (.ru).
Je pensais mettre une expression régulière pour bloquer les formulaires contenant une adresse mail finissant par .ru. Qu'est-ce que vous en pensez?
Et surtout comment la libeller et où la mettre?
J'ai appris les ER il y a quelques années, mais ça fait loin maintenant.

Je pensais par exemple à quelque chose du genre:

Code
<?php
if (preg_match("#.ru#$", "variable qui contient l'adresse mail"))
{
    je n'envoie pas le formulaire;
}
else
{
    j'envoie le formulaire';
}
?>


Il me manque encore quelques pièces du puzzle. ;-)

Écrit par : Jaypee 11 May 2018, 07:05

Hello,

Apparemment, PHP a été étendu dans ses versions les plus récentes avec des filtres de validation additionnels, pour le domaine, et même l'hostname:
http://php.net/manual/en/filter.filters.validate.php
Je ne suis pas sûr du niveau de contrôle qu'on peut avoir sur le test du hostname : il peut rejeter seulement vladimir_ru mais accepter vladimir.ru qui est bien formé.

Mais je ne suis pas expert PHP, j'ai seulement fait le lien avec d'autres technos de webdev et comment ce besoin d'intérêt général pouvait être traité en général, au moyen de filtres qui protègent l'application qui ne reçoit que des données validées.

@+JP

Écrit par : yponomeute 11 May 2018, 07:52

Citation (Ducace @ 10 May 2018, 16:43) *
Après quelques essais infructueux, j'ai finalement placé un captcha google. "Je ne suis pas un robot".
Mais malgré ça, je reçois encore ces soumissions.

Pour que le captcha puisse filtrer il faut impérativement que ce soit lui qui envoie la requête POST du formulaire et qu'il n'y ait aucun autre moyen d'envoyer cette requête (si par exemple en désactivant le javascript ton formulaire reste fonctionnel ton captcha ne sert à rien).

Écrit par : Ducace 11 May 2018, 21:42

Citation (yponomeute @ 11 May 2018, 08:52) *
...
Pour que le captcha puisse filtrer il faut impérativement que ce soit lui qui envoie la requête POST du formulaire et qu'il n'y ait aucun autre moyen d'envoyer cette requête (si par exemple en désactivant le javascript ton formulaire reste fonctionnel ton captcha ne sert à rien).

J'ai peut-être mal implémenté mon code.
Google recaptcha explique que
1. il faut mettre un bout de code javascript avant /head
Code
<script src='https://www.google.com/recaptcha/api.js'></script>

2. mettre une clé dans le formulaire:
Code
<div class="g-recaptcha" data-sitekey="la première clé"></div>

3. mettre un code php contenant la clé privée
Code
// Ma clé privée
    $secret = "deuxième clé";
    // Paramètre renvoyé par le recaptcha
    $response = $_POST['g-recaptcha-response'];
    // On récupère l'IP de l'utilisateur
    $remoteip = $_SERVER['REMOTE_ADDR'];
    
    $api_url = "https://www.google.com/recaptcha/api/siteverify?secret="
        . $secret
        . "&response=" . $response
        . "&remoteip=" . $remoteip;
    
    $decode = json_decode(file_get_contents($api_url), true);
    
    if ($decode['success'] == true) {
        // C'est un humain
    }

Ce code-là, je l'ai mis au début de mon script d'envoi habituel fait en php.

Est-ce correct?

Ce que je n'ai pas compris, c'est "il faut impérativement que ce soit lui qui envoie la requête POST".
Au début de mon formulaire j'ai le code :
Code
<form action="Page d'envoi au début de laquelle j'ai placé le dernier code.php" method="post" role="form">

Écrit par : Sgt.Pepper 15 May 2018, 10:57

Je te recommande http://jemsmailform.com/download/

Écrit par : Ducace 15 May 2018, 14:53

Citation (Sgt.Pepper @ 15 May 2018, 11:57) *
Je te recommande http://jemsmailform.com/download/

Merci, je vais regarder ça.

Entretemps, comme les spams continuaient, j'ai réfléchi à l'implémentation de mon script.

J'ai donc inversé la condition:

Code
if ($decode['success'] == true) {
        // C'est un humain
    }

en
Code
if ($decode['success'] == false) {
        // C'est un robot
    }

j'ai ajouté:
Code
exit ("message: vous n'avez pas coché, êtes-vous un robot?)

et puis

Code
else {avec tout le script php d'envoi de mail}


Apparemment, ça marche. Je ne reçois plus de spams.

Écrit par : Ducace 15 May 2018, 15:35

Citation (Sgt.Pepper @ 15 May 2018, 11:57) *
Je te recommande http://jemsmailform.com/download/

Ca m'a l'air bien comme script. Codage très propre avec un filtre pour les robots.

C'est un format texte qui contient le script php et un formulaire html. Je suppose qu'il faut l'adapter.

Je le testerai sur l'un de mes sites. Merci.

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)