Une expression régulière dans mon formulaire..., à cause de spams |
Bienvenue invité ( Connexion | Inscription )
Une expression régulière dans mon formulaire..., à cause de spams |
10 May 2018, 15:43
Message
#1
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 583 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.
|
|
|
11 May 2018, 07:05
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 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. |
|
|
11 May 2018, 07:52
Message
#3
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 969 Inscrit : 26 Jan 2011 Lieu : Pollachius virens Membre no 164 083 |
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). -------------------- MBP 2017 15" avec clavier pourri et touchbar inutile
|
|
|
11 May 2018, 21:42
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 583 Inscrit : 14 Dec 2005 Lieu : Bruxelles Membre no 51 677 |
... 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.
|
|
|
15 May 2018, 10:57
Message
#5
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 3 606 Inscrit : 10 Feb 2011 Membre no 164 526 |
Je te recommande ceci
|
|
|
15 May 2018, 14:53
Message
#6
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 583 Inscrit : 14 Dec 2005 Lieu : Bruxelles Membre no 51 677 |
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.
|
|
|
15 May 2018, 15:35
Message
#7
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 583 Inscrit : 14 Dec 2005 Lieu : Bruxelles Membre no 51 677 |
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.
|
|
|
Nous sommes le : 20th April 2024 - 04:04 |