2012-03-27 8 views
1

Ich möchte ein Senden an ein Freund-Formular erstellen und nicht für Spam verwendet werden.Verhindern von Spam von meinem Formular

Ich habe das Web durchsucht und fanden diese Quellen nützlich

http://www.nyphp.org/phundamentals/8_Preventing-Email-Header-Injection http://www.nyphp.org/phundamentals/6_Spoofed-Form-Submissions

dieser Code unten gut genug ist?

  • es entfernt alle neue Zeilen und die Rück Zeichen, damit neue Nachrichten kippen
  • verwendet es ein Session-Variable, so dass die Form nicht
gefälscht wird


function nospam($name) 
    { 
     return(str_replace(array("\r", "\n", "%OA", "%oa", "%OD", "%od", 
     "Content-Type:","BCC:","bcc:", "CC:","cc:"), "", $name)); 
    } 

    //the form posts to itself 
if(isset($_POST['submit'])){ 
    if($_POST['secret'] == $_SESSION['secret']){ 

     $_POST['email'] = nospam($_POST['email']); 
     $_POST['sendername'] = nospam($_POST['sendername']); 
     $_POST['link'] = nospam($_POST['link']); 
     $_POST['message'] = nospam($_POST['message']); 
     $_POST['senderemail'] = nospam($_POST['senderemail']); 


     $to = $_POST['email']; 
     $subject = $_POST['sendername'] . " has sent you this link."; 
     $message = "Hi " . $_POST['name'] . ",\n\n"; 
     $message .= "The following link was sent to you by " . $_POST['sendername'] . ".\n\n"; 
     $message .= $_POST['link'] . "\n\n"; 
     $message .= $_POST['message'] . "\n\n"; 
     $from = $_POST['senderemail']; 
     $headers = "From:" . $from; 
     mail($to,$subject,$message,$headers); 
     echo "Mail Sent."; 
    } 
    exit; 
}else{ 
    //set the secret variable when the page opens - only email if it exists 
    $secret = md5(uniqid(rand(), true)); 
    $_SESSION['secret'] = $secret; 
?> 

<!--html form code here --> 

<?php } ?> 
+0

können Sie ein CAPTCHA verwenden und Sie sollten die Anzahl der vorträgt auf 1 pro Minute beispielsweise begrenzen. – Songo

Antwort

Verwandte Themen