IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Une expression régulière dans mon formulaire..., à cause de spams
Options
Ducace
posté 10 May 2018, 15:43
Message #1


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 356
Inscrit : 14 Dec 2005
Lieu : Bruxelles
Membre no 51 677



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. ;-)

Ce message a été modifié par Ducace - 10 May 2018, 16:46.


--------------------
Sur Mac depuis qu'il y a des Macs.
Go to the top of the page
 
+Quote Post
Jaypee
posté 11 May 2018, 07:05
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 341
Inscrit : 29 Aug 2002
Membre no 3 340



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

Ce message a été modifié par Jaypee - 11 May 2018, 07:12.
Go to the top of the page
 
+Quote Post
yponomeute
posté 11 May 2018, 07:52
Message #3


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 491
Inscrit : 26 Jan 2011
Lieu : Pollachius virens
Membre no 164 083



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).
Go to the top of the page
 
+Quote Post
Ducace
posté 11 May 2018, 21:42
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 356
Inscrit : 14 Dec 2005
Lieu : Bruxelles
Membre no 51 677



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">


--------------------
Sur Mac depuis qu'il y a des Macs.
Go to the top of the page
 
+Quote Post
Sgt.Pepper
posté 15 May 2018, 10:57
Message #5


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 276
Inscrit : 10 Feb 2011
Membre no 164 526



Je te recommande ceci
Go to the top of the page
 
+Quote Post
Ducace
posté 15 May 2018, 14:53
Message #6


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 356
Inscrit : 14 Dec 2005
Lieu : Bruxelles
Membre no 51 677



Citation (Sgt.Pepper @ 15 May 2018, 11:57) *
Je te recommande ceci

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.


--------------------
Sur Mac depuis qu'il y a des Macs.
Go to the top of the page
 
+Quote Post
Ducace
posté 15 May 2018, 15:35
Message #7


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 356
Inscrit : 14 Dec 2005
Lieu : Bruxelles
Membre no 51 677



Citation (Sgt.Pepper @ 15 May 2018, 11:57) *
Je te recommande ceci

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.


--------------------
Sur Mac depuis qu'il y a des Macs.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 22nd May 2018 - 03:25