Aide anti spam

Suivre ce topic
Ce topic est suivi par : Personne...
Ce topic a été résolu
TrecKo

TrecKo Le 2 août 2016 à 17:12 (Édité le 25 janvier 2019 à 17:52)

Bonjour / Bonsoir

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

TheFlameflo Le 2 août 2016 à 17:40

Salut !

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).
Pour calculer la différence entre deux dates, je t'invite à suivre [url=http://www.finalclap.com/faq/110-php-calcul-difference-deux-date]ce tutoriel.
[/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

TrecKo Le 2 août 2016 à 23:48

Salut l'ami !

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

TheFlameflo Le 3 août 2016 à 00:12

Salut !

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

TrecKo Le 3 août 2016 à 00:28

Re !

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

TheFlameflo Le 3 août 2016 à 02:30

Heureux d'avoir pu t'aider et bonne chance pour la suite ! 😄
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte