Предотвратить спам из моей формы - PullRequest
1 голос
/ 27 марта 2012

Я хочу создать форму отправки другу и не использовать ее для спама.

Я искал в Интернете и нашел эти источники полезными

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

Достаточно ли хорош этот код ниже?

  • удаляет все новые строки и возвращаемые символы, поэтому новые сообщения не могут быть добавлены
  • он использует переменную сеанса, чтобы форма не могла быть подделана


 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 } ?>

1 Ответ

1 голос
/ 27 марта 2012

Вы можете использовать reCaptcha в нижней части формы, чтобы остановить подобные вещи.

http://vidiame.com/php/how-to-implement-recaptcha-with-your-php-project

...