Sécurité formulaire HTML/PHP

Résolu
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 - 28 nov. 2023 à 16:26
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 - 8 déc. 2023 à 10:11

Bonjour,

J'utilise Webacappella, un logiciel de création site web - Il permet tout de même de faire du HTML et du PHP.

J'ai réussit à insérer un formulaire HTML/PHP qui me permet de récupérer les contacts du formulaire dans une base de données OVH.

je reçois un mail qui contient les informations rentrées par l'utilisateur.

Tout va bien donc !! Pas tout à fait !!

Je pense que j'ai des faiblesses côté sécurité, j'ai mis en place des "pattern" des "strip_tags()" .... mais je n'arrive pas à supprimer de la textarea la possibilité d'insertion de liens . 

De plus je souhaite récupérer "true" dans mon mail de récéption pour être certaine que la case "capcha" a bien fonctionnée.

Bon un bon code vaut mieux que de grands discours: 

Mon fichier formulaire:

<form name="inscription" method="post" action="contact-test.php">
      <div class="row mb-3">
            <input type="text" name="nom" placeholder="Nom" required />
      </div>

      <div class="row mb-3">
            <input type="text" name="prenom" placeholder="Prénom" required />
      </div>

      <div class="row mb-3">
            <input name="tel" type="tel" placeholder="Téléphone - 00 00 00 00 00" required pattern="[0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2}" />
            <span class="validity"></span>
      </div>

      <div class="row mb-3">
            <input type="email" name="mail" pattern="[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}$" placeholder="Email" required />
      </div>

      <div class="row mb-3">Type de travaux :
            <select id="travaux" class="form-group" name="travaux" required>
                  <option selected>Votre besoin</option>
                  <option>Traitement Termites</option>
                  <option>Traitement Bois Charpente</option>
                  <option>Traitement Mérule</option>
                  <option>Traitement Remontées Capillaires</option>
                  <option>Traitement Air chaud</option>
                  <option>Nettoyage Façade</option>
                  <option>Sablage</option>
                  <option>Traitement Fourmis</option>
            </select>
      </div>
      <div class="row mb-3">
            <select id="departement" class="form-group" name="departement" required>
                  <option selected>Département des travaux :</option>
                  <option>44 - Loire-Atlantique</option>
                  <option>56 - Morbihan</option>
            </select>
      </div>
      <div class="row mb-3">
            <input type="text" name="codepostal" pattern="(?:0[1-9]|[1-8]\d|9[0-8])\d{3}" placeholder="Code Postal d'intervention" required />
      </div>

      <div class="row mb-3">
            <textarea name="message" rows="10" cols="70" pattern="'#^[a-zA-Z0-9áàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ\.\_\-\s]{5,500}$#'
            " placeholder="Votre Message" required></textarea>
      </div>

      <div class="form-check">
            <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" name="coche" cochée="oui"value="good" required>
            <label class="form-check-label" for="invalidCheck2">
                  Je ne suis pas un Robot !
            </label>
      </div>

      <input type="submit" name="valider" value="Envoyer" />
</form>

<?php

error_reporting(-1);
require 'fonctionsovh.php';
$db = getConnection();

if (isset($_POST['valider'])) {
      echo ('toto');
      //On prépare la commande sql d'insertion
      $query = $db->prepare('
                  INSERT INTO mabase (Nom,Prénom,Téléphone,Email,Travaux,CodePostal,Message,Departement,Provenance,dateinscription) VALUES (?,?,?,?,?,?,?,?,"xxxxx",Now())
                  ');
      $nom = strip_tags($_POST['nom']);
      $prenom = strip_tags($_POST['prenom']);
      $email = strip_tags($_POST['mail']);
      $message = strip_tags($_POST['message']);
      $query->execute([
            $nom,
            $prenom,
            $_POST['tel'],
            $email,
            $_POST['travaux'],
            $_POST['codepostal'],
            $message,
            $_POST['departement']
      ]);

      //Verifie si le fournisseur prend en charge les r
      if (preg_match("#@(hotmail|live|msn).[a-z]{2,4}$#", $email_from)) {
            $passage_ligne = "\n";
      } else {
            $passage_ligne = "\r\n";
      }
      // Pour les champs $expediteur / $copie / $destinataire,
      // séparez par une virgule s'il y a plusieurs adresses
      $destinataire = '***@***';
      $expediteur = '***@***';
      $copie = '';
      $copie_cachee = '***@***';
      $objet = $_POST["travaux"] . " xxxxxx " . " " . $_POST["departement"]; // Objet du message

      function clean_string($string)
      {
            $bad = array("content-type", "bcc:", "to:", "cc:", "href");
            return str_replace($bad, "", $string);
      }


      $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
      $headers .= 'Reply-To: ' . $expediteur . "\n"; // Mail de reponse
      $headers .= 'From:<' . $expediteur . '>' . "\n"; // Expediteur
      $headers .= 'Delivered-to: ' . $destinataire . "\n"; // Destinataire
      $headers .= 'Cc: ' . $copie . "\n"; // Copie Cc
      $headers .= 'Bcc: ' . $copie_cachee . "\n\n"; // Copie cachée Bcc

      $message = "Nom : " . $nom . "\n" . "\n" .
            "Prénom : " . $prenom . "\n" . "\n" .
            "Téléphone : " . $_POST["tel"] . "\n" . "\n" .
            "Mail : " . $email . "\n" . "\n" .
            "Travaux : " . $_POST["travaux"] . "\n" . "\n" .
            "Département des Travaux : " . $_POST["departement"] . "\n" . "\n" .
            "Code Postal : " . $_POST["codepostal"] . "\n" . "\n" . "\n" .
            "Message: " . $message . "\n" . "\n" .
            "Case robot :".$_POST["coche"];

      $success = false;
      $error_string = "";
      if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
      {
            $success = true;
      } else //
      {
            $success = false;
            $error_string = "Non envoyé !";
      }

      echo json_encode(['success' => $success, 'message' => $error_string]);
      // on ferme la connexion
      header('Location: contact-test.php');
      exit();
}

?>

pas certaine que mon fichier de connexion soit nécessaire. Si jamais merci de me le dire.

Recap : comment sécuriser mon textarea ?? comment récupérer ma case cochée oui/non

Merci d'avance

A voir également:

17 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
28 nov. 2023 à 20:34

Bonjour,

Je pense que tu confonds "lien" et "url"

<!-- Un lien -->
<a href="http://www.google.fr">Google</a>

<-- Une url ( c'est une string.. ) -->
http://www.google.fr

Si tu veux pouvoir supprimer les "url" ,  tu vas devoir retravailler la string 'message'  pour y supprimer   le http ou https, les www le .truc

Pour ça, tu peux utiliser une regex. ( nombreux tutos disponibles sur le net)


0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
29 nov. 2023 à 08:29

Bonjour @jordane45 StatutModérateur ,

C'est effectivement les URL que je souhaite supprimer ou rendre inactives

je regarde depuis tôt ce matin mais je ne trouve pas soit la bonne manière de l'écrire soit pas la bonne regex. 

Déjà il semble que mon "pattern dans textarea ne soit pas pris en compte : il semble que cette balise n'accepte pas cet attribut.

j'ai remplacé par ce ceci mais ça ne fonctionne pas. Que ce que j'écris mal ??

      $nom = strip_tags($_POST['nom']);

      $prenom = strip_tags($_POST['prenom']);

      $email = strip_tags($_POST['mail']);

      $message = preg_replace('!\[url=(.+?)\](.+?)\[\/url\]!isU', '<a href="$1">$2</a>',  strip_tags($_POST['message']));

Merci

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
29 nov. 2023 à 09:13

Commence par faire un var_dump de ta variable 

strip_tags($_POST['message'])

histoire de voir comment se présente le "text" que tu veux "supprimer".

Et encore une fois... vu qu'on parle d'URL ( et non de "lien") .. il n'y a pas de <a href...   !

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
29 nov. 2023 à 09:35

@jordane45 StatutModérateur, je ne sais pas faire tant pis - je trouverai une autre solution.

merci encore

J

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
29 nov. 2023 à 10:11

Tu ne sais pas faire .... quoi ?

un var_dump ?  Si tu ne connais pas, il existe les moteurs de recherche pour t'aider à trouver ...  https://www.google.com/search?q=var_dump

Rien de compliqué .. juste une fonction à appeller pour pouvoir afficher, lors de l'exécution de ton code, le contenu d'une variable

var_dump(strip_tags($_POST['message']));
exit; //si tu veux que ton script s'arrête là sans faire la suite le temps de corriger ton souci

Et niveau regex,  pour supprimer les URL de ta variable, tu devrais pouvoir passer par un truc du genre

$string = strip_tags($_POST['message']);
$regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?).*$)@";
$message = preg_replace($regex, ' ', $string);
0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
Modifié le 29 nov. 2023 à 10:51

je ne sais pas écrire le regex ! le var_dump c'était bon.

je vous remercie de cette solution. ça fonctionne sur mon mode test. Merci.

Sauriez vous comment je peux récupérer ma case "je ne suis pas un robot" dans mon mail?

Merci bonne journée

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
29 nov. 2023 à 11:10

en regardant la variable $_POST['coche']  non ?

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
29 nov. 2023 à 12:28

c'est ce que je pense avoir essayé de faire : 

      $message = "Nom : " . $nom . "\n" . "\n" .
            "Prénom : " . $prenom . "\n" . "\n" .
            "Téléphone : " . $_POST["tel"] . "\n" . "\n" .
            "Mail : " . $email . "\n" . "\n" .
            "Travaux : " . $_POST["travaux"] . "\n" . "\n" .
            "Département des Travaux : " . $_POST["departement"] . "\n" . "\n" .
            "Code Postal : " . $_POST["codepostal"] . "\n" . "\n" . "\n" .
            "Message: " . $message . "\n" . "\n" .
            "Case robot :".$_POST["coche"];

mais cela ne donne rien.

      <div class="form-check">
            <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" name="coche" cochée="oui"value="good" required>
            <label class="form-check-label" for="invalidCheck2">
                  Je ne suis pas un Robot !
            </label>
      </div>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
29 nov. 2023 à 18:20

L'attribut value de ton input est vide... Normal que tu n'aies pas de.valeur...

1
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
30 nov. 2023 à 09:56

Bonjour @jordane45 StatutModérateur, effectivement je l'avais mis puis retiré !! Bien entendu je ne pouvais pas récupérer quoi que ce soit !! Merci encore pour votre aide -Je suis presque au bout de mes peines ! Il ne me manque plus que le

header('Location: http://www.google.com');

exit();

qui ne fonctionne pas encore mais je planche sur le sujet - si vous avez un conseil  !

Bonne journée merci

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024
30 nov. 2023 à 10:14

Bien entendu... tu places ton code PHP ......   AVANT tout code html ?!

Si ton code est écrit tel que tu nous l'a montré dans ton premier message...ça ne pourra pas marcher.

Il faut déplacer le code php au dessus du code html

<?php
 // Ton code php...
//connexion à la bdd
// ... traitement de ton formulaire 
// ....etc...


?>
<!-- Puis.. le code HTML  -->
<!Doctype html>
<html>
  <head>

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 nov. 2023 à 10:24

Oui il est bien au dessu mais cela me marque mon message "message envoyé mais pas de redirection :

<?php

error_reporting(-1);
require 'fonctionsovh.php';
$db = getConnection();

if (isset($_POST['valider'])) {
      //echo ('toto');
      //On prépare la commande sql d'insertion
      $query = $db->prepare('
                  INSERT INTO mabase (Nom,Prénom,Téléphone,Email,Travaux,CodePostal,Message,Departement,Provenance,dateinscription) VALUES (?,?,?,?,?,?,?,?,"xxxxxx",Now())
                  ');
      $nom = strip_tags($_POST['nom']);
      $prenom = strip_tags($_POST['prenom']);
      $email = strip_tags($_POST['mail']);
      //$message = strip_tags($_POST['message']);
      //$message = str_replace("/", "", $message);
      $string = strip_tags($_POST['message']);
      $regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?).*$)@";
      $message = str_replace("'", "'", $message);
      $message = str_replace("&#8217;", "'", $message);
      $message = str_replace('<br />', '', $message);
      $message = str_replace("<", "<", $message);
      $message = str_replace(">", ">", $message);
      $message = str_replace("&", "&", $message);
      $message = preg_replace($regex, ' ', $string);

      //var_dump($message);

      $query->execute([
            $nom,
            $prenom,
            $_POST['tel'],
            $email,
            $_POST['travaux'],
            $_POST['codepostal'],
            $message,
            $_POST['departement']
      ]);

      //Verifie si le fournisseur prend en charge les r
      if (preg_match("#@(hotmail|live|msn).[a-z]{2,4}$#", $email_from)) {
            $passage_ligne = "\n";
      } else {
            $passage_ligne = "\r\n";
      }
      // Pour les champs $expediteur / $copie / $destinataire,
      // séparez par une virgule s'il y a plusieurs adresses
      $message_envoye = "Votre message nous est bien parvenu ! <a href=\"/\">Retour &agrave; la page principale</a>";
      $message_non_envoye = "<br /> <br />L'envoi du mail a échoué, veuillez réessayer SVP.";
      $destinataire = '***@***';
      $expediteur = '***@***';
      $copie = '';
      $copie_cachee = 'xx@xx';
      $objet = $_POST["travaux"] . " xx " . " " . $_POST["departement"]; // Objet du message

      function clean_string($string)
      {
            $bad = array("content-type", "bcc:", "to:", "cc:", "href");
            return str_replace($bad, "", $string);
      }


      $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
      $headers .= 'Reply-To: ' . $expediteur . "\n"; // Mail de reponse
      $headers .= 'From:<' . $expediteur . '>' . "\n"; // Expediteur
      $headers .= 'Delivered-to: ' . $destinataire . "\n"; // Destinataire
      $headers .= 'Cc: ' . $copie . "\n"; // Copie Cc
      $headers .= 'Bcc: ' . $copie_cachee . "\n\n"; // Copie cachée Bcc

      $message = "Nom : " . $nom . "\n" . "\n" .
            "Prénom : " . $prenom . "\n" . "\n" .
            "Téléphone : " . $_POST["tel"] . "\n" . "\n" .
            "Mail : " . $email . "\n" . "\n" .
            "Travaux : " . $_POST["travaux"] . "\n" . "\n" .
            "Département des Travaux : " . $_POST["departement"] . "\n" . "\n" .
            "Code Postal : " . $_POST["codepostal"] . "\n" . "\n" . "\n" .
            "Message: " . $message . "\n" . "\n" .
            "Case robot :" . $_POST["coche"];

      $success = false;
      $error_string = "";
      if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
      {
            echo ('message envoyé');
           header('Location: http://www.google.com');
           exit();

      } else //
      {
            $success = false;
            $error_string = "Non envoyé !";
      }


}


?>


<form name="inscription" method="post" action="contact-test.php">
      <div class="row mb-3">
            <input type="text" name="nom" placeholder="Nom" required />
      </div>

      <div class="row mb-3">
            <input type="text" name="prenom" placeholder="Prénom" required />
      </div>

      <div class="row mb-3">
            <input name="tel" type="tel" placeholder="Téléphone - 0000000000" required pattern="[0-9]{10}" />
            <span class="validity"></span>
      </div>

      <div class="row mb-3">
            <input type="email" name="mail" pattern="[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}$" placeholder="Email" required />
      </div>

      <div class="row mb-3">Type de travaux :
            <select id="travaux" class="form-group" name="travaux" required>
                  <option selected>Votre besoin</option>
                  <option>Traitement Termites</option>
                  <option>Traitement Bois Charpente</option>
                  <option>Traitement Mérule</option>
                  <option>Traitement Remontées Capillaires</option>
                  <option>Traitement Air chaud</option>
                  <option>Nettoyage Façade</option>
                  <option>Sablage</option>
                  <option>Traitement Fourmis</option>
            </select>
      </div>
      <div class="row mb-3">
            <select id="departement" class="form-group" name="departement" required>
                  <option selected>Département des travaux :</option>
                  <option>44 - Loire-Atlantique</option>
                  <option>56 - Morbihan</option>
            </select>
      </div>
      <div class="row mb-3">
            <input type="text" name="codepostal" pattern="(?:0[1-9]|[1-8]\d|9[0-8])\d{3}" placeholder="Code Postal d'intervention" required />
      </div>

      <div class="row mb-3">
            <textarea name="message" rows="10" cols="70" placeholder="Votre Message" pattern="'#^[a-zA-Z0-9áàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ\.\_\-\s]{5,500}$#'
            " required></textarea>
      </div>

      <div class="form-check">
            <input class="form-check-input" type="checkbox" value="YES" id="invalidCheck2" name="coche" cochée="oui" value="good" required>
            <label class="form-check-label" for="invalidCheck2">
                  Je ne suis pas un Robot !
            </label>
      </div>

      <input type="submit" name="valider" value="Envoyer" />
</form>

je ne dois surement pas le place où il faut. ! 

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
30 nov. 2023 à 11:33

Les fonctions "header(  " Ne peuvent pas se situer APRES que ta page ait affiché quoi que ce soit..
C'est ton echo qui bloque la redirection...

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 nov. 2023 à 11:39

J'ai supprimé le echo : 

  if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
      {

       header('Location: fin.php');
       exit();

      } else //
      {
            $success = false;
            $error_string = "Non envoyé !";
      }

mais lorsque je valide je reste sur la même page mais avec ma zone formulaire vide : 

https://www.best-termites.fr/www/contact-test.php

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
30 nov. 2023 à 13:37

Active l'affichage des erreurs PHP,

https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et éventuellement regarde dans le fichier erreur log de ton Apache.

Assure-toi bien de n'avoir aucun écho, var_dump... Avant ton instruction de redirection.

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 nov. 2023 à 14:01

j'ai activé l'affichage des erreurs et corrigé certaines.

la dernière est 

Warning: Cannot modify header information - headers already sent by (output started at /home/besttermds/www/www/contact-test.php:1) in /home/besttermds/www/www/contact-test.php on line 500
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
30 nov. 2023 à 14:06

ligne 500 ?

Tu as donc du code html AVANT ton php non ???

N'aurais tu pas mis ton fichier dans un include que tu chargerais en bas de ta page principale ???

Si oui.. tu as donc du html avant .. ce qui n'est pas bon !

Apres... tu peux toujours passer par du JS  au lieu de passer par l'instruction header si vraiment tu ne veux pas changer l'organisation de ton code ...

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 nov. 2023 à 14:19

@jordane45 StatutModérateur

c'est bon j'ai corrigé !! Je pense que cela devait venir des espaces après ?>

Mais comme je suis dans le logiciel j'ai modifié l'emplacement du code PHP et du coup c'est bon, je reçoit le mail, je l'enregistre dans ma BDD et je redirige !! 

Merci encore beaucoup de votre aide précieuse !

bonne journée

J

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1 > PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024
Modifié le 30 nov. 2023 à 14:21

je ne sais pas comment  (et si c'est à moi de marquer le sujet en résolu ?)............... trouvé !! merci encore

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
Modifié le 1 déc. 2023 à 13:54

bonjour @jordane45 StatutModérateur,

je suis passée en prod et le message reçu à bien supprimé les scripts, mais à conservé les liens que j'avais mis?

il me semble pourtant avoir conservé le regex que vous m'aviez donné : 

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

error_reporting(-1);
require 'fonctionsovh.php';
$db = getConnection();

if (isset($_POST['valider'])) {

      //On prépare la commande sql d'insertion
      $query = $db->prepare('
                  INSERT INTO ContactsBest (Nom,Prénom,Téléphone,Email,Travaux,CodePostal,Message,Departement,Provenance,dateinscription) VALUES (?,?,?,?,?,?,?,?,"Best-termites.fr",Now())
                  ');
      $nom = strip_tags($_POST['nom']);
      $prenom = strip_tags($_POST['prenom']);
      $email = strip_tags($_POST['mail']);
      $string = strip_tags($_POST['message']);
      $regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?).*$)@";
      $message = preg_replace($regex, ' ', $string);


      $query->execute([
            $nom,
            $prenom,
            $_POST['tel'],
            $email,
            $_POST['travaux'],
            $_POST['codepostal'],
            $message,
            $_POST['departement']
      ]);

      //Verifie si le fournisseur prend en charge les r
      if (preg_match("#@(hotmail|live|msn).[a-z]{2,4}$#", $email)) {
            $passage_ligne = "\n";
      } else {
            $passage_ligne = "\r\n";
      }

      // Pour les champs $expediteur / $copie / $destinataire,
      // séparez par une virgule s'il y a plusieurs adresses

      $destinataire = '***@***';
      $expediteur = '***@***';
      $copie = '';
      $copie_cachee = '***@***';
      $objet = $_POST["travaux"] . " BEST-TERMITES.fr " . " " . $_POST["departement"]; // Objet du message

      function clean_string($string)
      {
            $bad = array("content-type", "bcc:", "to:", "cc:", "href");
            return str_replace($bad, "", $string);
      }


      $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
      $headers .= 'Reply-To: ' . $expediteur . "\n"; // Mail de reponse
      $headers .= 'From:<' . $expediteur . '>' . "\n"; // Expediteur
      $headers .= 'Delivered-to: ' . $destinataire . "\n"; // Destinataire
      $headers .= 'Cc: ' . $copie . "\n"; // Copie Cc
      $headers .= 'Bcc: ' . $copie_cachee . "\n\n"; // Copie cachée Bcc

      $message = "Nom : " . $nom . "\n" . "\n" .
            "Prénom : " . $prenom . "\n" . "\n" .
            "Téléphone : " . $_POST["tel"] . "\n" . "\n" .
            "Mail : " . $email . "\n" . "\n" .
            "Travaux : " . $_POST["travaux"] . "\n" . "\n" .
            "Département des Travaux : " . $_POST["departement"] . "\n" . "\n" .
            "Code Postal : " . $_POST["codepostal"] . "\n" . "\n" . "\n" .
            "Message: " . $message . "\n" . "\n" .
            "Case robot :" . $_POST["coche"];


      $success = false;
      $error_string = "";
      if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
      {
            header('Location: https://www.best-termites.fr/index.html');
            exit();
      } else //
      {
            $success = false;
            $error_string = "Non envoyé !";
      }
}
?>

Sauriez vous me dire ? 

merci beaucoup

J

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1 > PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024
4 déc. 2023 à 09:11

bonjour @jordane45 StatutModérateur

sauriez vous m'aider pour les url conservées?

cordialement

J

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
6 déc. 2023 à 14:51

bonjour @ tous.

je suis en prod, mon code de traitement php est en début, mon formulaire html en suivant-

Mon formulaire s'envoie, la page se redirige, les champs s'enregistrent bien dans la bdd, mais dans le message reçu et enregistrer dans la bdd il reste les url et je souhaite les supprimer - 

Est ce que vous auriez des idées?

Merci

J

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
6 déc. 2023 à 15:44

A part faire du debug pour essayer de voir ce que contiennent tes différentes variables lors de l'enregistrement.. il n'y a pas grand chose d'autre qu'on puisse faire...

Donc, retire le REDIRECTION (sinon tu ne pourras pas voir les éventuels debug que tu vas mettre),  places des var_dump de tes différentes variables avant ta requête INSERT  ... et regarde ce qu'elles contiennent...

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
6 déc. 2023 à 17:04

Bonjour @jordane45 StatutModérateur

suite à ce code : 

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

error_reporting(-1);
require 'fonctionsovh.php';
$db = getConnection();

if (isset($_POST['valider'])) {

      //On prépare la commande sql d'insertion
      $query = $db->prepare('
                  INSERT INTO ContactsBest (Nom,Prénom,Téléphone,Email,Travaux,CodePostal,Message,Departement,Provenance,dateinscription) VALUES (?,?,?,?,?,?,?,?,"Best-termites.fr",Now())
                  ');
      $nom = strip_tags($_POST['nom']);
      $prenom = strip_tags($_POST['prenom']);
      $email = strip_tags($_POST['mail']);
      $string = strip_tags($_POST['message']);
      $regex = "@(^(https?|ftp)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s]*)?$)@";
      $message = preg_replace($regex, ' ', $string);

var_dump($nom, $prenom, $email, $message);

      $query->execute([
            $nom,
            $prenom,
            $_POST['tel'],
            $email,
            $_POST['travaux'],
            $_POST['codepostal'],
            $message,
            $_POST['departement']
      ]);

      //Verifie si le fournisseur prend en charge les r
      if (preg_match("#@(hotmail|live|msn).[a-z]{2,4}$#", $email)) {
            $passage_ligne = "\n";
      } else {
            $passage_ligne = "\r\n";
      }

      // Pour les champs $expediteur / $copie / $destinataire,
      // séparez par une virgule s'il y a plusieurs adresses

      $destinataire = '***@gmail.com';
      $expediteur = '**@best-termites.fr';
      $copie = '';
      $copie_cachee = '**@**';
      $objet = $_POST["travaux"] . " BEST-TERMITES.fr " . " " . $_POST["departement"]; // Objet du message

      function clean_string($string)
      {
            $bad = array("content-type", "bcc:", "to:", "cc:", "href");
            return str_replace($bad, "", $string);
      }


      $headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
      $headers .= 'Reply-To: ' . $expediteur . "\n"; // Mail de reponse
      $headers .= 'From:<' . $expediteur . '>' . "\n"; // Expediteur
      $headers .= 'Delivered-to: ' . $destinataire . "\n"; // Destinataire
      $headers .= 'Cc: ' . $copie . "\n"; // Copie Cc
      $headers .= 'Bcc: ' . $copie_cachee . "\n\n"; // Copie cachée Bcc

      $message = "Nom : " . $nom . "\n" . "\n" .
            "Prénom : " . $prenom . "\n" . "\n" .
            "Téléphone : " . $_POST["tel"] . "\n" . "\n" .
            "Mail : " . $email . "\n" . "\n" .
            "Travaux : " . $_POST["travaux"] . "\n" . "\n" .
            "Département des Travaux : " . $_POST["departement"] . "\n" . "\n" .
            "Code Postal : " . $_POST["codepostal"] . "\n" . "\n" . "\n" .
            "Message: " . $message . "\n" . "\n" .
            "Case robot :" . $_POST["coche"];


      $success = false;
      $error_string = "";
      if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
      {
            //header('Location: https://www.best-termites.fr/index.html');
          //  exit();
      } else //
      {
            $success = false;
            $error_string = "Non envoyé !";
      }
}
?>

j'obtiens : 

string(9) "jennif@jh" string(4) "test" string(23) "***@***" string(93) "fhidshfsdfu bonjour, https://www.php.net/manual/fr/function.var-dump.php hfubjhfd fhduis"

donc au final, cela signifie qu'aucun de mes "strip_tags" ne fonctionnent pas

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
6 déc. 2023 à 18:09

As-tu été testé sur les sites que je t'ai donné ta redex ??

Fonctionne-t-elle sur ces sites ???

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
7 déc. 2023 à 15:52

bonjour @jordane45 StatutModérateur,

Alors voilà deux jours que je regarde des tutos pour comprendre comment fonctionnent les deux sites que vous m'avez donné !!! ça y est j'ai compris !! (vive Boris !).

mes premiers tests ont l'ai convaincants : du coup ça donne ça : 

      $string = strip_tags($_POST['message']);
      $regex = preg_replace('/(https?:\/\/|www\.)([a-zA-Z0-9-_\.\/\?=&]+)/im', 'url', $string);
      $message = $regex;

donc mon message ne contien plus d'url

je vais voir si je peux améliorer les $nom et $prenom.

Merci encore de votre précieuse aide !

J

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
7 déc. 2023 à 17:08

Par contre j'essaye de combiner plusieurs regex (1 pour les url, c'est bon ! et une pour les caractères non latins) .

mais pour le moment ça coince 

      $string = preg_replace('/([^!A-Za-z0-9]+)im/', '',$_POST['message']);
      $regex = preg_replace('/(https?:\/\/|www\.)([a-zA-Z0-9-_\.\/\?=&]+)/im', 'url', $string);
      $message = $regex;
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
7 déc. 2023 à 17:30

Bonjour,

Peux tu nous faire des var_dump de tes variables juste après ta variable $message 

echo "<pre>";
var_dump($_POST['message']);
var_dump ($string)
var_dump($regex);
echo "</pre>";
0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
8 déc. 2023 à 07:57

Bonjour, 

voici : 

string(208) "fdsfsdfsfs

https://forums.commentcamarche.net/forum/affich-37954204-securite-formulaire-html-php#p37959643
fdskhk 

Ողջույն, ես ուզում էի իմանալ ձեր գինը.
maisn fdhofhsdlf"
string(208) "fdsfsdfsfs

https://forums.commentcamarche.net/forum/affich-37954204-securite-formulaire-html-php#p37959643
fdskhk 

Ողջույն, ես ուզում էի իմանալ ձեր գինը.
maisn fdhofhsdlf"
string(126) "fdsfsdfsfs

url#p37959643
fdskhk 

Ողջույն, ես ուզում էի իմանալ ձեր գինը.
maisn fdhofhsdlf"

mon URL a bien été remplacée par 'URL' mais les caractères non latin non pas été supprimés  - indépendamment chacun des expression fonctionne. mais pas ensemble 

Merci J

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
8 déc. 2023 à 08:47

Tu as une erreur sur ta première regex .. il manque un / devant im

$string = preg_replace('/([^!A-Za-z0-9]+)/im', ...

Ensuite.. cette regex retourne ceci :  "fdsfsdfsfshttpsforumscommentcamarchenetforumaffich37954204securiteformulairehtmlphpp37959643fdskhkmaisnfdhofhsdlf"

Penses tu que, ensuite, ta regex de lien va fonctionner sur cette chaine de caractères ?

Moi j'inverserai les deux regex ...

La première corrige les liens,

Puis la seconde traitera les caractères non latins

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
8 déc. 2023 à 09:23

J'ai corrigé mon erreur et inverser les deux : 

ring(217) "test testjofdsm 12345 

https://forums.commentcamarche.net/forum/affich-37954204-securite-formulaire-html-php
fydsifyis
 Ողջույն, ես ուզում էի իմանալ ձեր գինը.
dfsufyuifd

hufdusy"
string(135) "test testjofdsm 12345 

URL#
fydsifyis
 Ողջույն, ես ուզում էի իմանալ ձեր գինը.
dfsufyuifd

hufdusy"
string(78) "testLATINtestjofdsmLATIN12345LATINURLLATINfydsifyisLATINdfsufyuifdLATINhufdusy"

donc effectivement je n'ai plus d'URL ni de caractères non latin mais pourquoi tout mon texte s'est il collé ? m est censé faire le multiligne?

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
8 déc. 2023 à 09:59

le "m" permet de prendre en compte le multiligne...  pas de le "créer".

Par contre.. attention...

Lorsque tu as des retours à la lignes dans tes textarea, ils sont traduits par les caractères  \r\n  ou \n

En "html", pour les voir, il faut mettre des <br>

En php, tu as une fonction qui permet de convertir les caractères de retour à la ligne en <br>  :  nl2br()

je t'invite à en regarder la doc.

PS: ta question initiale : Traitement des liens dans ton formulaire est traitée et résolue.

Je t'invite donc à mettre cette discussion en RESOLUE  puis, si besoin, d'en ouvrir une nouvelle pour tes "nouveaux" soucis.

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
Modifié le 8 déc. 2023 à 10:11

Merci @jordane45 StatutModérateur,

effectivement je connais la fonction nl2br()- je vais regarder.

Merci de votre aide.

effectivement la première question résolue.!! 

J

0