2010-01-29 2 views
0

J'ai des compétences PHP très basiques. À l'heure actuelle, j'essaie de «renverser» l'ingénieur d'un formulaire de contact, j'ai trouvé une ligne qui a une certaine sécurité de niveau (je ne sais vraiment pas à quel point c'est bon). Je pense que je l'ai eu, ça marche, mais je pensais que peut-être que certains d'entre vous plus d'expérience en php peuvent jeter un coup d'œil et voir si c'est toujours sécurisé. Comme je l'ai dit, je l'ai inversé, donc je ne sais pas si j'ai cassé la sécurité, mais ça marche très bien. Comme vous pouvez le voir, c'est assez basique. J'ai beaucoup lu et appris ce que tout fait, je m'inquiète juste de la commande et de la redondance (je veux l'éviter si nécessaire) ... tout ce que je peux faire pour le nettoyer autant que possible.Dans la sécurisation simple email formulaire de contact

code

ci-dessous:

<?php 
      $to='[email protected]'; 
      $sender=stripslashes($_POST['sender']); 
      $email=stripslashes($_POST['email']); 
      $subject=stripslashes($_POST['subject']); 
      $message=stripslashes($_POST['message']); 
      $body= "Greetings,\n\n$message\n\n$sender" . 
        "\n" ; 

      $displayForm=true; 
      if ($_POST){ 
       $sender=($_POST['sender']); 
       $email=($_POST['email']); 
       $subject=($_POST['subject']); 
       $message=($_POST['message']); 
       $valid=eregi('^([0-9a-z]+[-._+&])*[0-9a-z][email protected]([-0-9a-z]+[.])+[a-z]{2,6}$',$email); 
       $crack=eregi("(\r|\n)(to:|from:|cc:|bcc:)",$sender); 
       $crack=eregi("(\r|\n)(to:|from:|cc:|bcc:)",$message); 
        if ($sender && $email && $message && $valid && !$crack){ 
        if (mail($to,$subject,$body,'From: '.$email."\r\n")){ 
       $displayForm=false; 
     ?> 
     <div>Your message has been sent successfully. Thank you for contacting us.</div> 
     <?php 
      echo '<p>'.htmlspecialchars($message).'</p>'; 
      }else { 
     ?> 
     <div>Your message could not be sent due to a system error. We apologize for any inconvenience.</div> 
     <?php 
      } 
      }else if ($crack){ 
     ?> 
     <div>Your message contained one or more anomalies, indicative of malicious content. Please consider revising your wicked ways.</div> 
     <?php 
      }else { 
     ?> 
     <div>You failed to complete a required field, or to provide a valid email address.</div> 
     <?php 
      } 
       } 
      if ($displayForm){ 
?> 

<form action="./" method="post"> 
    <div class="contact-border"><input class="contact-textbox" type="text" name="sender" id="sender" tabindex="1" value="<?php echo htmlspecialchars($sender); ?>" /> <strong> Name</strong></div> 

    <div class="contact-border"><input class="contact-textbox" type="text" name="email" id="email" tabindex="2" value="<?php echo htmlspecialchars($email); ?>" /> <strong> Email Address</strong></div> 

    <div class="contact-border-noreq"><input class="contact-textbox-noreq" type="text" name="subject" id="subject" tabindex="3" value="<?php echo htmlspecialchars($subject); ?>" /> <strong> Subject (optional)</strong></div> 

    <div class="contact-border"><textarea class="contact-textbox" name="message" id="message" cols="90" rows="15" tabindex="4" ><?php echo htmlspecialchars($message); ?></textarea></div> 

    <div><input class="submit-button" type="submit" value="Submit" name="submit" /></div> 
</form> 
     <?php 
      } 
     ?> 

Répondre

0

Votre code semble bien, mais pourrais-je suggère d'ajouter un CAPTCHA? J'ai fait l'erreur de ne pas en mettre un sur mon site, et j'ai payé un gros prix dans le spam pendant quelques jours.

+0

Merci beaucoup Jason. J'avais déjà recaptcha mais je l'ai enlevé et j'ai adopté l'option "champ caché". J'ai une entrée cachée dans css qui va tuer le script s'il est rempli. Je n'ai pas encore utilisé le spam. Je déteste juste remplir des captchas et je ne veux pas mettre mes visiteurs à travers ça. Je l'ai supprimé ci-dessus pour simplifier le code et le rendre plus facile pour quiconque le regarde. J'espérais me protéger contre les injections d'en-têtes ou l'exécution de scripts, le détournement de cartes, etc. En cherchant essentiellement à le rendre aussi sûr que possible. Merci encore pour votre aide :) –

Questions connexes