2016-08-09 3 views
1

ребята. Я пытался обмануть голову, но я очень новичок в PHP. Я пробовал всевозможные обучающие программы для фильтров спама PHP, но ни один из них не работает правильно, когда я пишу их в форму.Фильтрация спама в контактной форме PHP

Код, который я пытался изменить это:

<?php 
header ("Location: index.html"); 
if(!empty($_POST['topName']) || !empty($_POST['topEmail']) || !empty($_POST['topPhone'])) { 
    $name = $_POST['topName']; 
    $emailAddress = $_POST['topEmail']; 
    $phone = $_POST['topPhone']; 
    $message = $_POST['topMessage']; 

    $email_to = "com[email protected]"; 
    $email_from = "$name <$emailAddress>"; 
    $email_subject = "Message from online contact form"; 
    $email_body = "From: $name\n" . 
        "Email: $emailAddress\n" . 
        "Phone: $phone\n\n" . 
        "$message"; 
    $email_headers = "From: $email_from \r\n" . 
       "Reply-To: $emailAddress \r\n"; 

    mail($email_to, $email_subject, $email_body, $email_headers); 
} 
exit; 
?> 

лишь часть того, что работал добавлял !empty вещи, но до сих пор только блокирует спам, который оставляет эти поля пустыми. Кажется, я не могу ничего работать, когда я следую учебным пособиям. Есть ли что-то, что я могу сделать, чтобы создать супер простой спам-фильтр или учебник, чтобы понять, что новичок может понять?

Любая помощь или совет будут оценены!

+0

Выполните проверку данных вашей формы на PHP. Это помогает предотвратить обход ботов от игнорирования javascript. Добавьте капчу или другую систему проверки человека. Это может быть так же просто, как небольшая математическая проблема, которую пользователь должен заполнить при отправке формы. – Twisty

+0

Можете начать здесь: https://www.abeautifulsite.net/a-simple-php-captcha-script – Twisty

+0

Вы также можете изучить '$ _SERVER ['HTTP_USER_AGENT']' и убедиться, что податель использует реальный браузер. – Twisty

ответ

0

Для того, чтобы поля не пусты, вы можете выполнить некоторые валидации так:

<?php 

function checkLength($d, $min, $max){ 
    if(strlen($d) > $max || strlen($d) < $min){ 
     return false; 
    } else { 
     return true; 
    } 
} 

function checkRegEx($d, $reg){ 
    return ereg($reg, $d); 
} 

$fields = [ 
    'name' => $_POST['topName'], 
    'email' => $_POST['topEmail'], 
    'phone' => $_POST['topPhone'] 
] 

$valid = true; 

// Check that each is not empty 
foreach($fields as $k => $v){ 
    $valid = $valid && !empty($v); 
} 

// Add HTML Safe Message 
$fields['message'] = htmlentities($_POST['topMessage']); 

// Check that name has enough characters 
$valid = $valid && checkLength($fields['name'], 3, 25); 

// Check that Email has enough characters 
$valid = $valid && checkLength($fields['email'], 5, 80); 

// Check Email format 
$valid = $valid && checkRegEx($fields['email'], "/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/"); 

if($valid) { 
    $email_to = "[email protected]"; 
    $email_from = "{$fields['name']} <{$fields['email']}>"; 
    $email_subject = "Message from online contact form"; 
    $email_body = ""; 
    $email_body .= "From: {$fields['name']}\r\n"; 
    $email_body .= "Email: {$fields['email']}\r\n"; 
    $email_body .= "Phone: {$fields['phone']}\r\n\r\n"; 
    $email_body .= $fields['message']; 
    $email_headers = "From: {$fields['email']}\r\n"; 
    $email_headers .= "Reply-To: {$fields['email']}\r\n"; 

    mail($email_to, $email_subject, $email_body, $email_headers); 
} 
exit; 
?> 
0

Одним из наиболее эффективных способов остановить спам, чтобы убедиться, что каждое поле содержит именно то, что, как ожидается. Например, имя должно содержать только буквы, цифры номера телефона и т. Д. Если нет необходимости в текстовых полях, чтобы включать URLS, а не отправлять сообщения, когда они это сделают, это устранит много спама.

Далее вы можете использовать поля honeypot. Это поля, которые скрыты от людей, но часто обнаруживаются спам-ботами. Вы проверяете представление, если они содержат что-либо, и если они знают, что это спам.

Вы также можете проверить время между отображением страницы формы и отправкой формы. Очень быстрые представления указывают на атимутированный спам.

Captcha должен быть последним средством, возможно, отображаться только в том случае, если другие методы предлагают спам.

Наконец, вы могли бы сделать жизнь намного проще для себя, используя класс, который делает это много для вас, например. http://stefangabos.ro/php-libraries/zebra-form/ или приложение для создания формы, например http://wufoo.com