Forums Développement Multimédia

Aller au contenu

Formulaire avec code de sécurité

CODE HTML CSS

73 réponses à ce sujet

#1 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 08 July 2010 - 23:17 PM

Bonsoir,

Comme on en voit partout, la question a certainement déjà été abordée mais bon...

Il s'agit donc de faire un formulaire avec un code de sécurité à ressaisir par celui qui remplit le formulaire. Le problème, c'est que je souhaiterais installer sur un site non dynamique (sans base de données). ;-)

Est-ce possible ??? ;)

#2 matt-murdock

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 6851 messages

Posté 09 July 2010 - 14:49 PM

fait une recherche avec "captcha" et regarde s il existe des variante sans BDD ( je me demande meme si c est necessaire d office.. il faut un langage coté serveur genre php ou asp ... mais une BDD??!)

#3 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 09 July 2010 - 15:15 PM

Je n'arrive pas à savoir si les systèmes proposés exige une BDD...

#4 matt-murdock

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 6851 messages

Posté 09 July 2010 - 15:37 PM

d apres mes recherche pas besoin d une BDD pour faire tourner un captcha ( mais php, asp, python ou autre langague cote serveur)
regarde "recaptcha" de google...
a+

#5 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 09 July 2010 - 15:55 PM

Recaptha, pas mal comme article mais je ne vois pas de solution particulière à mettre en place dans l'immédiat...

#6 Frank.b

  • Members
  • PipPipPipPipPipPipPipPip
  • 539 messages

Posté 09 July 2010 - 16:56 PM

A mon avis, mieux qu'un captcha (qui n'est pas top niveau ergonomie),
voici la solution que j'utilise (et qui fonctionne bien aujourd'hui) :

Dans un formulaire classique, tu y ajoutes un champs, caché via un style css, que tu testes en php (php obligatoire, si uniquement en javascript, comme on peut le désactiver, ça ne servira à rien). L'humain ne verra pas ce champs, il ne le remplira donc pas, les autres champs si. Le robot spammeur, lui, va tout remplir (puisque le champs est dans le code html), par défaut. Donc, en gros, faut bloquer l'envoi du formulaire si ce champs est remplie.

A+
frank

#7 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 09 July 2010 - 17:51 PM

Après avoir lu quelques article sur les captcha, il se trouve effectivement que ça n'est plus efficace, tu as raison.
Ton astuce à donc l'air super intéressante mais je ne sais pas réaliser des champs invisibles en php. Est-ce que tu pourrais me donner un peu plus d'info ? ;)

#8 Frank.b

  • Members
  • PipPipPipPipPipPipPipPip
  • 539 messages

Posté 09 July 2010 - 20:12 PM

un lien rapide : http://geekarlier.co...e=codes&code=10
tu trouveras certainement d'autres tuto dans le genre...

frank

#9 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 09 July 2010 - 21:49 PM

Si je peux résumer le tuto :


- on fait son formulaire calssiquement

- on ajoute le js :


<script type="text/javascript">
function verifForm(okform)
{
if(document.forms['votreForm'].elements['host'].value == '')
{ // On teste si 'host' est vide
alert(okform);
document.forms['votreForm'].submit();
}
else
{
document.location='http://www.antispam.com/';
}
}
</script>

- et on ajoute une partie complémentaire en php dont j'ignore l'utilité :
<?php
if(isset($_POST['host']) && empty($_POST['host']))
}
else

}
?>

Est-ce que ça peut fonctionner avec ça ??? ;)

#10 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 29 July 2010 - 09:46 AM

Salut, je me suis personnellement servi de ce formulaire muni d'une protection par réponse à un calcul (pas celui avec le captcha) en lui ajoutant un champ caché avec test du remplissage.
Si un robot remplit le champ (ce qui lui sera logique), le formulaire retourne un message de remerciement bidon et le script ne se poursuit pas.
Si ce champ n'est pas rempli, il ne s'agit pas d'un robot et le script envoie le mail après avoir vérifié le remplissage des champs à remplir.

Apparemment ce script fonctionne bien mais il faut mettre les mains dans le cambouis pour le personnaliser.

Une fois mon déménagement terminé, ma connexion OK et le PC remonté et prêt à tourner, je peux te filer le code modifié.

Si par le plus grand des hasards je devais oublier de te fournir ce code (et cela ne m'étonnerait pas vu le nombre de choses qui trottent dans mon petit cerveaux en ce moment), n'hésites pas à me le rappeler.

#11 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 29 July 2010 - 13:51 PM

Salut Edfred,

Je suis moralement à fond avec toi pour t'aider dans ce déménagement, (mais c'est intéressé... ;)), j'attends aussi la suite pour voir.
Merci en tous cas pour tes explications claires et détaillées.

#12 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 15 August 2010 - 14:14 PM

Comme promis, voici le code comme je l'ai modifié.

Le code du formulaire.
<?php
include_once("antispam.php");
?>
<?php
// Dans la ligne qui suit, remplacer webmaster_AT_domaine.tld par l'adresse email du webmaster, laquelle les messages devront tre envoys
$email_webmaster = "webmaster_AT_domaine.tld";
// Rajout alphega: Dans cette ligne remplacez "example.com" par le nom de votre site ou votre propre personnalisation. Utile si vous avez plusieurs formulaires.
$titre_cache = "example.com";
// === traitement des donnes du formulaire ============================================================
if (isset($_POST["envoyer"])){
// le formulaire a t soumis
$etat = "erreur";
// Valeur par dfaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---
if (isset($_POST["nom"])) {
$_POST["nom"]=trim(stripslashes($_POST["nom"]));
}
if (isset($_POST["email_expediteur"])) {
$_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
}
if (isset($_POST["titre"])) {
$_POST["titre"]=trim(stripslashes($_POST["titre"]));
}
if (isset($_POST["site_web"])) {
$_POST["site_web"]=trim(stripslashes($_POST["site_web"]));
}
if (isset($_POST["message"])) {
$_POST["message"]=trim(stripslashes($_POST["message"]));

}
// --- test de la validit des champs saisis ---
if (!empty($_POST["site_web"])) {
exit("merci de votre visite");
}
else {
if (empty($_POST["nom"])) {
// il manque l'email de l'expditeur
$erreur="<p class=\"red\";>Saisissez votre nom&#8230;</p>";
}
elseif (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expditeur
$erreur="<p class=\"red\";>Saisissez votre adresse email&#8230;</p>";
}
elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[
0-9a-z])*\.[a-z]{2,4}{:content:}quot;,$_POST["
email_expediteur"])){
// l'adresse e-mail n'est pas valide
$erreur="
<p class=\"red\";>Votre adresse e-mail n'est pas valide&#8230;</p>";
}
elseif (empty($_POST["message"])) {
// le message est vide
$erreur="<p class=\"red\";>Saisissez un message&#8230;</p>";
}
elseif (antispam_check() == false) {
// l'addition est fausse
$erreur="<p class=\"red\";>Rsultat du calcul incorrect, veuillez ressayer svp !</p>";
}
else {
// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
$etat="ok";
}
}
}
else {
// --- le formulaire n'a pas t soumis ---
$etat="attente";
}


// === fin de traitement des donnes du formulaire =======================================================
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="styles.css" rel="stylesheet" type="text/css" media="screen" />
<title>Titre de la page</title>
</head>
  <body>
        <h4>Contactez-nous par email.</h4>
        <?php
if ($etat!="ok"){// le formulaire n'a pas t soumis, ou soumis avec une erreur
if ($etat=="erreur"){
//le formulaire a t soumis avec une erreur
echo "<p><strong>".$erreur."</strong></p>\n";
// afficher le message d'erreur
}
?>
        <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
          <fieldset>
          <legend>Contactez-nous par email.</legend>
          <p class="dissim">
            <label for="site_web">Veuillez ne pas remplir le champ suivant sous peine de non envoi du formulaire, ceci est
            une protection antispam : </label><!-- Avertissement pour les personnes utilisant des navigateurs en mode texte qui ne tiennent pas compte des CSS. -->
            <input type="text" name="site_web" id="site_web" tabindex="1" />
<!-- J'ai ci dessus indiqu un champ de type texte et non de type cach (hidden),
je  cacherai le paragraphe de classe dissim par les proprits CSS par un display:none. C'
est ce champ qui ne pourra pas tre rempli-->
          </p>
          <p>
            <label for="nom">Votre nom (obligatoire) : </label>
            <input class="input" tabindex="2" type="text" name="nom" id="nom" value="<?php
if (!empty($_POST["
nom"])) {
// le nom de l'expditeur a t saisie: le rafficher
echo htmlspecialchars($_POST["
nom"],ENT_QUOTES);
}
?>"
/>
          </p>
          <p>
            <label for="email_expediteur">Votre adresse e-mail (obligatoire) : </label>
            <input class="input" tabindex="3" type="text" name="email_expediteur" id="email_expediteur" value="<?php
if (!empty($_POST["
email_expediteur"])) {
// l'adresse email de l'expditeur a t saisie: la rafficher
echo htmlspecialchars($_POST["
email_expediteur"],ENT_QUOTES);
}
?>"
/>
          </p>
          <p>
            <label for="titre">Titre de message (facultatif) : </label>
            <input class="input" tabindex="4" type="text" name="titre" id="titre" value="<?php
if (!empty($_POST["
titre"])) {
// le titre du message a t saisi: le rafficher
echo htmlspecialchars($_POST["
titre"],ENT_QUOTES);
}
?>"
/>
          </p>
          <p>
            <label for="message">Message (obligatoire):</label>
           

            <textarea tabindex="5" name="message" id="message" cols="60" rows="8"><?php
if (isset($_POST["message"])) {
// le message a t saisi: le rafficher
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?>
</textarea>
          </p>
          <p><img src="IMG/attention.png" alt="Attention" /> Rsultat du calcul ci-dessous: addition ou soustraction, le
            rsultat peut-etre ngatif.

            Ex: 1-4 taper: -3 (Ceci est une scurit anti-spam)</p>
          <p><span class="calcul">
            <?php antispam_ins(); ?>
            </span>
            <input class="button" tabindex="7" type="submit" name="envoyer" title="Envoyer votre email" value="Envoyer votre email" />
          </p>
          </fieldset>
        </form>
        <?php
}
else {
// le formulaire a t soumis sans erreur, on envoie le mail
$entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
$entete .= "Return-Path: ". $email_webmaster . "\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "Content-type: text/plain; charset=utf-8";
$ip.="Adresse IP: ". $_SERVER['REMOTE_ADDR'] . "\n";
$nav.="Navigateur: ". $_SERVER['HTTP_USER_AGENT'] . "\n\n";
$nom.="Nom du contact : ". $_POST['nom']."\n\n";
if (@mail($email_webmaster,$titre_cache.$_POST["titre"],$ip.$nav.$nom.$_POST["message"],$entete)){
// mail envoy
echo "<p>Votre message a t envoy.</p>";
echo "<p><a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a></p>";
}
else {
// erreur lors de l'envoi du mail
echo "<p>Un problme s'est produit lors de l'envoi du message.</p>";
echo "<p><a href=\"".$_SERVER["PHP_SELF"]."\">Ressayez&#8230;</a></p>";
}
}
?>
</body>
</html>
 

À vous d'intégrer le formulaire dans votre page en vous basant sur ce code.

#13 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 15 August 2010 - 17:33 PM

Je suis sûr que ce script fonctionne bien mais je dispose actuellement d'un formulaire tout fait qui renvoie vers une page de confirmation (pour l'expéditeur) et qui contient mon code php. Je pense que ce code, plutôt ancien, n'est pas très sécurisé. ;)

Est-il donc possible de lui ajouter un champs pour gagner en sécurité ou faut-il que je passe pas mal de temps à refaire tout mon formulaire à partir de ton code, sachant que je n'ai pas tout décrypté ?

Mon code actuel :



<?PHP
//Adresse email de réception
$Emailres = "nom@orange.fr";

// Ici on indique le sujet du message
$sujet = "Demande de contact";

//Contenu du mail
$Commentaire = "----------------------------- Début du message ------------------------------<BR>";
$Commentaire .= " Voici les réponses du formulaire de contact : <BR><BR>";
$Commentaire .= " Civilité : $par<BR>";
$Commentaire .= " Nom : $Nom<BR>";
$Commentaire .= " Prénom : $Prenom<BR>";
$Commentaire .= " Société : $Raison_sociale<BR>";
$Commentaire .= " Adresse : $adresse<BR>";
$Commentaire .= " Code postal: $codepostal<BR>";
$Commentaire .= " Ville : $ville<BR>";
$Commentaire .= " Téléphone : $Telephone<BR>";
$Commentaire .= " Fax : $Fax<BR>";
$Commentaire .= " E-mail : $Email<BR>";
$Commentaire .= " Message : $Message<BR>";
$Commentaire .= " Numéro cotisation ou SIRET : $numero_adherent<BR>";
$Commentaire .= " Souhaite : $checkbox3 $checkbox32<BR>";
$Commentaire .= " et au sujet : $select<BR><BR>";
$Commentaire .= "----------------------------- Fin du message -----------------------------<BR>";

//Entte complémentaires
$headers = "From: $Email\nReply-To: $Email\nMIME-Version: 1.0\nContent-Type: text/html\n";

//En cas d'échec d'envoi du mail
if(!mail("$Emailres",$sujet,$Commentaire,$headers)) {
echo "message non envoye";
}
?>

#14 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 16 August 2010 - 16:13 PM

Tu peux très bien modifier ton script.
Il faut ajouter un champ au formulaire, le cacher par les CSS, puis vérifier dans le code si il est renseigné et selon le cas, envoyer ou non l'email.

#15 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 16 August 2010 - 21:08 PM

Ajouter un champs bidon, ça peut se faire, par contre, j'ai quelques interrogations élémentaires :

- comment le cacher en css ? est-ce que je dois lui affecter des paramètres couleurs qui le rende invisible sur le fond de mon formulaire ?

- comment "vérifier le code" pour savoir s'il est renseigné et envoyer ou non le mail ? je n'ai pas repéré exactement cette partie dans ton code de démo... ;)

#16 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 17 August 2010 - 07:25 AM

Hello Goudurisc,

- Edfred a déjà mis une class "dissim". Il suffit de lui attribuer un "display: none" dans les CSS et cela le fait. C'est d'ailleurs en clair dans son code.
- La vérification du code est là :

// --- test de la validité des champs saisis ---
if (!empty($_POST["site_web"])) {
exit("merci de votre visite");
}
 
@Edfred : Merci d'avoir partagé ce bout de code très utile.

#17 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 17 August 2010 - 11:10 AM

Merci, j'y vois un peu plus clair, en théorie...

Bon, faut-il préciser que j'en suis à me digérer en ce moment les règles élémentaires du php... mais je m'accroche :texas:

Concernant le formulaire, je teste avec la version d'edfred qui est forcément bien conçue.

si j'ai bien compris, pour que le champs antispam soit complètement invisible par les visiteurs, il faut attribuer "display: none" à la class "dissim". Ce que j'ai fait.

Bon, en test, le formulaire est complètement... invisible ! ;)

#18 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 17 August 2010 - 12:32 PM

Hello Goudurisc,

il y a chez moi un problème avec la fonction PHP eregi (ligne 45) qui n'est plus supportée par ma version de PHP 5.3.2 et que j'ai donc légèrement modifiée, sinon le formulaire s'affiche bien. (Je n'ai pas antispam.php, mais ce n'est pas bloquant puisqu'il le charge par include_once et pas par require_once).

Es-tu sur de tes CSS ? Au besoin, met la ligne
<link href="styles.css" rel="stylesheet" type="text/css" media="print" />
en commentaire,
<!-- <link href="styles.css" rel="stylesheet" type="text/css" media="print" /> -->
le temps d'obtenir ce que tu cherches

#19 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 17 August 2010 - 14:56 PM

Je n'ai fait en fait qu'ajouter le css de la classe "dissim"... je te joins malgré tout le fichier

Fichier(s) joint(s)



#20 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 18 August 2010 - 11:08 AM

Hello Goudurisc,

J'ai remplacé la fonction eregi qui pose problème chez moi, par preg_match dans ton fichier joint, et cela affiche bien le formulaire...

Je te le renvoie avec la correction pour essai.

#21 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 18 August 2010 - 14:54 PM

Merci beaucoup, le formulaire s'affiche mais je ne comprends pas pourquoi le bouton "Envoyer votre mail" est invisible... ;)

#22 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 18 August 2010 - 20:32 PM

Voir le messageGoudurisc, le 08 July 2010 - 23:17 PM, dit :

Bonsoir,

Comme on en voit partout, la question a certainement déjà été abordée mais bon...

Il s'agit donc de faire un formulaire avec un code de sécurité à ressaisir par celui qui remplit le formulaire. Le problème, c'est que je souhaiterais installer sur un site non dynamique (sans base de données). ;)

Est-ce possible ??? :texas:

Salut.
Ce doit être possible, pour envoyer un mail, on n'a pas besoin de base de donnée.

Je sais pas comme ça mais j'imagine qu'il faudrait deux fichiers contenant un formulaire quasi identique et dans le deuxième récupérer les données indiquées dans le premier lorsqu'on aura enfoncé le premier bouton (prévisualisation par exemple).

Pas facile facile…

#23 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 18 August 2010 - 21:05 PM

Heu... edfred, désolé mais je suis un peu égaré...

C'est toi qui a apporté la solution en proposant un formulaire sans captcha avec un champ caché.

Dans ta dernière intervention, tu site mon premier message et tu apportes une nouvelle réponse... est-ce que j'ai raté un passage ? je reconnais que ma question n'était pas limpide initialement.

Sinon, après l'intervention de Symphonie qui m'a permis de faire fonctionner ton formulaire sans problème, j'ai constaté que le bouton qui permet d'envoyer le formulaire "Envoyer votre mail" est invisible...

C'est le dernier détail qui me manque. Bien entendu, il aurait fallu que je trouve la solution pour q'un message s'affiche après validation du formulaire du type "votre message a bien été envoyé". ;) :texas:

#24 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 19 August 2010 - 08:37 AM

Bonjour Goudurisc,

Le formulaire n'est pas utilisable tel quel en copier-coller : Edfred utilise un fichier antispam.php qui est appelé au début du script
<?php
include_once("antispam.php");
?>
Celui-ci contient au moins une fonction php antispam_ins qui est appelée là ...
<?php antispam_ins() ; ?>
... mais comme le fichier antispam.php est vraisemblablement absent chez toi, Php détecte cette erreur et arrête le processus en affichant :
Fatal error: Call to undefined function antispam_ins() in C:\WebTest\formChampsInvisible.php on line 146
L'affichage du bouton étant juste en-dessous, il n'est plus exécuté.

Tu arriveras à afficher le bouton, en mettant par exemple :
<?php echo "antispam_ins()" ; ?>
mais le formulaire ne fonctionnera pas pour autant. Il faut que tu inclues la fonction de sécurité qui remplace le captcha. Tu trouveras des pistes avec google en cherchant par exemple "antispam.php & antispam_ins"
comme ici : lien

C'est un bon exercice si tu débutes en Php. Pas facile, mais jouable. Je suis autodidacte aussi. ;-)
Courage, tu y es presque...

@Edfred : As-tu le code antispam.php et les CSS qui vont avec le code, cela aidera un peu notre ami qui a le goût du risque.

Cordialement

#25 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 19 August 2010 - 10:35 AM

Tu as de la chance Goudurisc, j'ai trouvé ça pour toi. Yapuka tester et adapter.

Bon courage

#26 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 19 August 2010 - 10:42 AM

Si c'est le fichier associé au lien que tu m'as communiqué, je l'avais téléchargé. Je peux donc considérer que :
- je reprends mon ancien formulaire php (qui fonctionnait bien)
- je télécharge le fichier associé antispam
- j'ajoute le code qui appelle ce fichier dans mon formulaire
<?php
echo "<form id='formulaire' action='".$_SERVER["PHP_SELF"]."'method='post'>"; /* insérer le calcul en faisant un simple appel à une fonction */

[...]
antispam_ins();
echo "<input type='submit' value='Envoyer' />";
echo "</form>";
?>
<?php
if(antispam_check() == false)
{
echo "Résultat incorrect, veuillez réessayer !"; /* Vérifier si le résultat est correct */
}
else
{
[...] envoi du mail et/ou insertion du formulaire dans la base de données.
}
?>


... et ça fonctionne ???? ;-)

#27 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 19 August 2010 - 10:42 AM

Et hop, je te fais partager encore ma dernière découverte ...

ici

A toi de jouer maintenant, il y a de quoi ...

En espérant que cela t'aide,
Cordialement

#28 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 19 August 2010 - 15:22 PM

Merci mais ta dernière solution fonctionne avec captcha et je recherche plutôt une solution avec champ invisible.

Par contre, peux-tu me confirmer que la solution de mon message précédent fonctionne ? ;-)

#29 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 19 August 2010 - 18:00 PM

Salut. Le lien pour l'anti-spam était sur la page dont je donne le lien dans ce post.

Merci pour la relève symphonie… ;-)

#30 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 19 August 2010 - 21:33 PM

Merci à tous, je vais essayer de réunir les différentes solutions pour en extraire une que je serai capable de mettre en place et qui soit efficace ;-)

#31 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 20 August 2010 - 07:12 AM

@Goudurisc : Effectivement, le formulaire fonctionne comme cela. Bon courage pour la suite. Tiens nous au courant.


@Edfred : Avec plaisir pour la "relève". Je n'avais pas captché qu' antispam.php figurait déjà dans ton lien...

#32 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 20 August 2010 - 09:56 AM

Heu... les amis, avant de vous libérer complètement, il me faudrait juste une petite confirmation : le fichier antispam.php qui doit être associé au code d'edfred est bien :

Le lien : ici


Le titre de l'article :
Formulaire de contact avec captcha addition soustraction de Byc

Le fichier à télécharger :
Télécharger le script antispam de byc

;-)

#33 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 20 August 2010 - 10:24 AM

Bon rien à faire, je n'arrive pas à faire fonctionner le formulaire avec le fichier antispam.php. Le code du formulaire est en deux partie et je ne sais pas s'il faut le coller tel que, d'un seul tenant et sans correction, en dehors de l'insertion de son adresse mail.

Rien ne s'affiche...

Je vais essayer de trouver une solution proche qui puisse se greffer sur mon ancien formulaire php.

Si je trouve, je vous soumettrai ça

Encore merci

#34 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 20 August 2010 - 13:02 PM

Hello Goudurisc,

Allons-y pas à pas.

Voila en PJ la version des progammes qui fonctionnent chez moi.

Installe et teste. Si problème il y a, assure-toi que le MAMP est opérationnel et fonctionne.
(le mail ne sera pas envoyé si tu n'as pas de serveur SMTP configuré sur ton poste local). Il faudra vérifier aussi que ton hébergeur autorise l'utilisation de la fonction mail, certains henergeurs gratuits font des restrictions sur cette fonction.

Une fois que cette base fonctionne, fais en une copie de sauvegarde et modifie le formulaire selon tes besoins... et n'hésite pas à revenir si tu as d'autres questions. Le formulaire avec mail n'est pas ce qu'il y a de plus facile, mais quand tu en auras fait et compris un, les autres iront tout seul. ;-)

Cordialement

5 fonies

#35 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 21 August 2010 - 00:09 AM

Merci pour ta patience, ça fonctionne avec Mamp.

Cela dit, je n'ai peut-être pas tout compris, le système antispam exploite un principe de calcul, pourquoi pas, mais il me semblait que l'astuce consistait à placer un champ caché...

Est-ce qu'il y a les deux systèmes de sécurité ?

Comme tu l'as dit, c'est du pas à pas ;-)

#36 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 21 August 2010 - 06:41 AM

Bonjour.
Goudurisc, le fichier PHP contient tout ce qu'il faut pour être bien protégé; une protection par la réponse au calcul proposé ET un champ caché qui, s'il est rempli, stoppe le script et envoie un message bidon de remerciement. Bien entendu, il faut que la classe dissim soit précisée et formatée dans ta CSS pour que le champ soit caché.

Description :
La première partie php vérifie que les champs requis soient bien renseignés et le cas échéant, réaffiche les champs correctement renseignés plus un message indiquant l'erreur éventuelle.
Ensuite vient la vérification du champ caché :
if (!empty($_POST["site_web"])) {
echo "On t'as vu";
exit("merci de votre visite");
}
Le code ci-dessus veut dire : Si le champ "site web" est renseigné (ou plutôt non vide, alors que c'est un champ caché), il s'agit très probablement d'un bot, la fonction exit, termine le script à cette étape et renvoie un message de remerciement. Pour le Bot, la mission est remplie mais n'envoie pas le mail.
Si ce champ n'est pas rempli parce qu'un utilisateur normal n'a pas pu le remplir, le script continue et envoie le mail tant attendu

Maintenant si tu as besoin que ton visiteur renseigne une URL, alors il faut modifier l'appellation du champ "site_web" par autre chose de cohérent.

Avec tout ça tu devrais t'en tirer.
N'étant pas programmeur php, j'ai eu une misère du diable à mettre tout ça en place mais j'y suis finalement arrivé, à toi maintenant de mettre ça en page, ça c'est de la routine HTML.

Amicalement. ;-)

#37 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 21 August 2010 - 10:30 AM

Merci, c'est très clair et ta précision concernant le champ caché sit_web était indispensable

Sinon, je n'ai pas bien compris l'utilité de saisir l'adresse d'un site dans : $titre_cache =

Le formulaire et ses fonctions sont opérationnels pour la plupart mais quand je valide un mail rempli, une page de validation s'affiche contenant :

Email Webmaster : webmaster@orange.fr
Entête : From: webmaster@orange.fr Return-Path: webmaster@orange.fr MIME-Version: 1.0 Content-type: text/plain; charset=utf-8
Titre caché : webmaster.net Titre : Objet de mon message
Nom : Nom de lexpéditeur
Message : Mon message blabla
ip Adresse IP: 86.210.253.51
ip Navigateur: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; fr-fr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
ip Nom du contact : Nom du contact
Votre message a été envoyé.
Envoyer un autre message...

...et dans ma boîte mail, je trouve la réponse :
Adresse IP: 86.210.253.51
Navigateur: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; fr-fr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
Nom du contact : Nom de lexpéditeur
Mon message blabla

->Pourquoi la page de confirmation affiche toute ses infos (IP + navigateur) ? à la limite, qu'elle apparaissent sur le mail de réponse
Comment personnaliser cette page de confirmation ?

-> il manque des réponses dans mon mail (ex : titre/objet du message, adresse mail de l'expéditeur)
Comment retrouver toutes les réponses ?

Je sais que ces questions te sollicitent encore mais maintenant que le plus dur est fait... ;-)

#38 Eddy.vh

    Éternel apprenti.

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1194 messages

Posté 21 August 2010 - 10:44 AM

Bizarre, dans la page de confirmation, tu devrais n'avoir que :
"Votre message a été envoyé.
Envoyer un autre message..."


#39 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 21 August 2010 - 11:09 AM

J'ai testé dur Safari, je vais voir ce sue ça donne sur PC avec Esplorer

#40 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 23 August 2010 - 06:31 AM

Voir le messageedfred, le 21 August 2010 - 10:44 AM, dit :

Bizarre, dans la page de confirmation, tu devrais n'avoir que :
"Votre message a été envoyé.
Envoyer un autre message..."


Bonjour,

C'est ma faute, j'ai rajouté ces echo pour vérifier que le script fonctionne. Je n'ai pas SMTP sur ma machine de test. Donc pas possible d'envoyer de mail pour vérifier.

@Gourdurisc, je te recontacte un peu plus tard pour tacher de répondre à tes interrogations mais il semble que cela fonctionne déjà.

#41 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 23 August 2010 - 08:33 AM

Citation

...et dans ma boîte mail, je trouve la réponse :
Adresse IP: 86.210.253.51
Navigateur: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; fr-fr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16

Les valeurs sont chargées à ce niveau du script ...


if (isset($_SERVER)) {
                $ip="Adresse IP: ". $_SERVER['REMOTE_ADDR'] . "\n";
                $nav="Navigateur: ". $_SERVER['HTTP_USER_AGENT'] . "\n\n";
                $nom="Nom du contact : ". $_POST['nom']."\n\n";
}
 
C'est à dire : Si la variable (tableau) PHP $_SERVER est affectée (isset), affecter à la variable $ip la valeur
(texte) "Adresse IP: " ajouter derrière la valeur REMOTE ADDR du tableau $_SERVER = (adresse IP), puis ajouter un retour à la ligne \n.
Idem pour les lignes suivantes. HTTP_USER_AGENT donne les caractéristiques du navigateur de l'utilisateur (ici Mozilla ... Safari)

Ces informations sont ensuite envoyées dans le corps du courriel, juste avant $_POST['message'], ici :

if (@mail($email_webmaster,$titre_cache.$_POST["titre"],$ip.$nav.$nom.$_POST["message"],$entete)){
Ces infos permettent dans une certaine mesure de tracer des mails indésirables, quoique ce ne soit pas très efficace, si c'est un vrai spammer...

Si tu ne veux plus les voir dans ton mail remplace la ligne par ...
if (@mail($email_webmaster,$titre_cache.$_POST["titre"],$nom.$_POST["message"],$entete)){
en supprimant les variables $ip, et $nav.

Pour "$titre_cache" tu peux appliquer le même principe en le supprimant comme suit...
if (@mail($email_webmaster,$_POST["titre"],$nom.$_POST["message"],$entete)){


Désolé si le contenu est un peu touffu. Garde toujours une copie avant de faire les modifications.

Avec cela tu devrais pouvoir avancer encore de quelques pas, à moins que tu sois déjà à des lieues ;-) mais n'hésites pas à revenir...si besoin est.

Bon courage

Saint Phonie

#42 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 23 August 2010 - 10:09 AM

symphonie, j'apprécie sincèrement ta débauche d'explications et de correctifs mais à mon niveau d'avancement en php, c'est encore du gâchis. C'est forcément un peu contrariant de ne pas pouvoir profiter intelligemment de ce partage d'infos. J'ai néanmoins remplacé les lignes de code mais l'affichage n'est pas encore top.

Aujourd'hui, c'est pour moi la rentrée infernale et en solution intermédiaire, avant de trouver à nouveau le temps de finaliser celle-ci, est-ce qu'il serait possible de ne greffer sur mon ancien formulaire (fichier présenté un peu en amont de ce post) uniquement la partie qui concerne le champ caché ? En l'état, ce serait déjà rapidement opérationnel pour moi. ;-)

#43 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 23 August 2010 - 13:35 PM

Hello Goudurisc,

Je suis prêt à t'aider, mais pas jusqu'au point d'écrire le code à ta place.
Désolé pour la "débauche" de code, c'était dans l'intention de t'aider à comprendre.

Cordialement

#44 goudurisc

  • Members
  • PipPipPipPipPipPipPipPip
  • 674 messages

Posté 23 August 2010 - 13:49 PM

Quand je parle de débauche de code, c'est une façon de dire que j'apprécie que tu te donnes autant de mal pour moi et je t'en remercie à nouveau ! :Hola: Je voulais dire également que ça me gênait presque que tu passes autant de temps sur certaines explications alors que n'avais pas les compétences pour les apprécier à leur juste valeur, à mon grand regret !

Pour le formulaire, il n'était pas question une seconde que tu m'écrives tout ou partie du code mais j'avais imaginé que, sur la base de mon formulaire (qui fonctionne a priori correctement), je puisse copier-coller la partie "champ masqué" du formulaire de edfred dans mon formulaire... :lol: Bon, si tu me dis que ce n'est pas simple, je comprends tout à fait.

#45 gerard.bartholome

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 110 messages

Posté 23 August 2010 - 15:01 PM

O.K. Cela me rassure, je pensais un moment que tu me prenais pour un débauché du PHP. :Hola:

Plus sérieusement, il faut ajouter :
include_once("antispam.php");
pour inclure antispam.php dans ton script. (au début par exemple)

ensuite insérer :
<form>
...
          <p><span class="calcul">
            <?php antispam_ins() ; ?>
            </span>
            <input class="button" tabindex="7" type="submit" name="envoyer" title="Envoyer votre email" value="Envoyer votre email" />
          </p>

 ...

</form>

 
à l'endroit du formulaire où tu voudras voir s'afficher la formule de calcul et le bouton. Et a priori, c'est tout, puisque le contrôle s'effectue dans antispam.php.

Ne pas oublier le piège à bot dont Edfred a détaillé plus haut le fonctionnement.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP