Aide anti spam
- Accueil
- Forum
- Programmation
- PHP
- Aide anti spam
TrecKo Le 2 août 2016 à 17:12 (Édité le 25 janvier 2019 à 17:52)
J'aimerai créer un système d'anti spam pour mon site internet.
Je développe l'idée, j'ai un formulaire de contact avec les champs E-MAIL et MESSAGE et un input de type submit, j'aimerai que lorsque quelqu'un envoi le message, il doit attendre admettons 30 minutes avant de pouvoir en renvoyer un autre et que si il tente de renvoyer un message avant c'est 30 minutes, un message d'erreur s'affiche avec le temps restant avant de pouvoir renvoyer un message.
Je ne suis pas très " fort " en développement et je ne sais pas également en quelle langage s'effectue un tel système du coup j'ai posté dans " php " 😒
Si quelqu'un pourrait me donner une piste ou autre chose qui m'aiderai à faire ce système.
Merci de votre compréhension.
Cordialement, Impulsion
TheFlameflo Le 2 août 2016 à 17:40 (Édité le 1 janvier 1970 à 01:00)
Je crois que PHP (avec une base de données) peut faire l'affaire.
Voici quelques pistes (je garantis rien) :
- Tu stockes l'IP et l'adresse mail lors de l'envoi dans une base de données. Par la suite, tu vérifies lorsque quelqu'un poste un message si l'IP ou l'adresse mail a posté un email dans les 30 dernières minutes.
- Tu peux aussi ajouter une protection supplémentaire, tu mets une session et un cookie avec le dernier moment où il a posté un email et tu fais encore le test des 30 minutes. Je tiens cependant à préciser que cette protection supplémentaire, couplée à aucune autre idée de protection que je te donne ou que tu recevras de la part des autres membres du forum est inutile, car on peut facilement quitter le site ou supprimer un cookie.
- Tu peux mettre en place un captcha pour arrêter les robots et décourager les humains (bien qu'un captcha ne soit pas vraiment difficile à résoudre pour quelqu'un).
[/url]Tout ce que j'ai proposé plus haut ce fait plus ou moins facilement en PHP.
Si tu as d'autres questions, n'hésite pas !
Bonne chance !
TrecKo Le 2 août 2016 à 23:48 (Édité le 1 janvier 1970 à 01:00)
Alors j'ai été voir sur le lien que tu m'as donner, j'ai trouvé ce bout de code :
function dateDiff(date1, date2){
var diff = {} // Initialisation du retour
var tmp = date2 - date1;
tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60; // Extraction du nombre de secondes
tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière)
diff.min = tmp % 60; // Extraction du nombre de minutes
tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières)
diff.hour = tmp % 24; // Extraction du nombre d'heures
tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants
diff.day = tmp;
return diff;
}
Mais le problème que j'ai, c'est que moi et les functions sa fait deux 😕 Du coup d'après mes connaissances je devrais mettre dateDiff($dates, )
Mais je ne sais pas ce que je dois mettre en deuxième paramètre car normalement, je dois mettre l'heure actuel et l'heure dans laquelle la personne pourra utilisé le script fin je suis perdu, si tu peux m'aider à y voir plus clair s'il te plaît 😒
TheFlameflo Le 3 août 2016 à 00:12 (Édité le 1 janvier 1970 à 01:00)
Ce que tu as eu n'est pas du PHP, mais du Javascript.
Je crois donc que ce n'est pas nécessairement une bonne idée d'utiliser ce langage de programmation si tu veux bien protéger.
Je te conseille d'opter pour la fonction en PHP qui est la suivante :
function dateDiff($date1, $date2){
$diff = abs($date1 - $date2); // abs pour avoir la valeur absolute, ainsi éviter d'avoir une différence négative
$retour = array();
$tmp = $diff;
$retour['second'] = $tmp % 60;
$tmp = floor( ($tmp - $retour['second']) /60 );
$retour['minute'] = $tmp % 60;
$tmp = floor( ($tmp - $retour['minute'])/60 );
$retour['hour'] = $tmp % 24;
$tmp = floor( ($tmp - $retour['hour']) /24 );
$retour['day'] = $tmp;
return $retour;
}
J'ai fais quelques tests de mon côté pour calculer la différence entre deux dates et voici le résultat :
<?php
function dateDiff($date1, $date2){
$diff = abs($date1 - $date2); // abs pour avoir la valeur absolute, ainsi éviter d'avoir une différence négative
$retour = array();
$tmp = $diff;
$retour['second'] = $tmp % 60;
$tmp = floor( ($tmp - $retour['second']) /60 );
$retour['minute'] = $tmp % 60;
$tmp = floor( ($tmp - $retour['minute'])/60 );
$retour['hour'] = $tmp % 24;
$tmp = floor( ($tmp - $retour['hour']) /24 );
$retour['day'] = $tmp;
return $retour;
}
$now = time();
$date2 = strtotime('2016-08-03 17:50:05');
$diff = dateDiff($now, $date2);
if($diff['minute'] < 30)
{
echo "Veuillez attendre 30 minutes avant de pouvoir renvoyer un mail.";
}
else
{
echo "Vous pouvez envoyer un mail !";
}
Donc, la fonction prend la 1ère date, qui est maintenant dans ton cas, donc une variable avec time() à l'intérieur.
La deuxième date est dans ton cas la date quand quelqu'un a envoyé le mail.
Il suffit d'appliquer la fonction dateDiff qu'on stocke dans une variable et de faire le test avec $tavariable['minute'] et tester si ça fait moins de 30 minutes qu'un message a été posté !
J'ai oublié de te préciser plus haut que si tu souhaites faire en sorte de garder des l'espace dans ta bdd, faire une tâche CRON (je t'invite à aller voir sur Google 😉 ) pour supprimer toutes les entrées avec une différence de plus de 30 minutes (et les paramètres que tu veux).
Bonne chance pour la suite et ça me fera plaisir de t'aider si tu as d'autres questions ! 😀
TrecKo Le 3 août 2016 à 00:28 (Édité le 1 janvier 1970 à 01:00)
Alors j'ai tester ton code et chez moi sa ne fonctionne pas ^^ mais pas grave, j'ai été me renseigner un peu sur google pour les tâches CRON, d'après ce que j'ai lu, nous pouvons faire beaucoup de chose avec et pleins de chose qui me serait utile 😀
En tout cas merci pour ton aide et merci de m'avoir fait découvert les tâches CRON 😄
TheFlameflo Le 3 août 2016 à 02:30 (Édité le 1 janvier 1970 à 01:00)