2012-06-24 4 views
0

У меня есть скоростная форма на веб-сайте, где пользователь заполняет форму электронной почты, и она будет отправлена ​​мне по электронной почте. Однако спамер попал на сайт и рассылает спам с помощью козла и так далее. Запрет IP не помогает, поэтому мне нужно остановить отправку формы, если она содержит козе или что-то в этом роде. Вот почтальон.

<?php 
$SPOSTI =$_POST[sposti]; 


if ($SPOSTI=="") 
{ 
    return false; 
} 

if ($SPOSTI=="goatse.fr") 
{ 
    return false; 
} 
if ($SPOSTI=="http://www.goatse.info/hello.jpg") 
{ 
    return false; 
} 
else 
{ 
    $to = "[email protected]"; 
    $subject = "xxx"; 
    $message = "$_POST[sposti] haluaa tiedon kun kotisivut.name avautuu. 
    $_POST[ip]"; 
    $from = "$_POST[sposti]"; 
    $headers = "From:" . $from; 
    mail($to,$subject,$message,$headers); 
} 
    ?> 

Есть ли каким-то образом, чтобы заблокировать его от выполнения кода, если письмо содержит определенное слово (goatse в данном случае)

+0

Er, между прочим - 'if ($ SPOSTI == '') {return" Вы убогались. ';} ' – cypher

+0

Что? Это только прекращает отправку формы, если ее пустая? –

+0

Вы приближаетесь проблема не в том, что нужно. Подождите, пока вы не начнете получать «часы реплики», «cialis» и т. д. Черные списки слов, IP-адресов, URL-адресов, до сих пор доходят до вас и могут привести к ложным срабатываниям, требующим дополнительных мер. нет никакой серебряной пули для этой очень распространенной проблемы ... –

ответ

1

Вы должны использовать exit или die вместо return false, который работает внутри функции/методы :

if ($SPOSTI =="" || strpos('goatse', $SPOSTI) !== FALSE) 
{ 
    exit(); 
} 
+0

Хорошо, это работает, если goatse включает в себя вот так: wdwijdgoatseidw'? –

+1

@ChristianNikkanen Он делает, 'strpos()' искать любую строку внутри другой. –

+0

Это хороший и простой подход, однако вы проверяете только «sposti» от $ _POST. tacker отправляет эту строку в «ip», например, которая также используется в письме? – alkar

0

strpos() позволит вам найти подстроку, но я действительно рекомендую систему безопасности капчи как злоумышленник может просто переключиться на другое раздражающее слово.

Goatse arn't ваша проблема здесь, это безопасность.

+0

Ненавижу переписку. И другие люди. –

+0

Ну, это единственный способ отфильтровать реальных людей от роботов. В противном случае вы полагаетесь на то, что все в Интернете любят вас, что, по-видимому, не так. –

0

Вы можете использовать stristrhttp://php.net/manual/de/function.stristr.php, чтобы добиться этого. Я бы рекомендовал использовать капчу, поскольку он более эффективен. Популярным решением является reCaptcha: https://developers.google.com/recaptcha/docs/php Другая, более слабая возможность - добавить к вашей форме вопрос безопасности, например «Что такое пять плюс пять в цифрах?».

1

Попробуйте следующее:

function is_spam($array, $block_pattern){ 
    $block = false; 
    foreach($array as $k => $v){ 
     if(preg_match('/.*' . $block_pattern . '.*/', $k) || 
      preg_match('/.*' . $block_pattern . '.*/', $v)){ 
      $block = true; 
      break; 
     } 
    } 

    return $block; 
} 

Usage: is_spam($_POST, 'goatse'); 
Returns: true if 'goatse' is found in $_POST 

Функция будет искать все ключи и значения $array для $block_pattern строки и вернет true если шаблон найден.

+0

Упрощенный, мне нравится ваш подход с функцией и информацией об использовании/возврате. Очень яркий. –

Смежные вопросы