CakePHP Форма Спам - PullRequest
       2

CakePHP Форма Спам

2 голосов
/ 25 июля 2011

Я создал контактную форму, используя CakePHP, следуя инструкции на http://snook.ca/archives/cakephp/contact_form_cakephp

Но хотелось бы добавить защиту от спама, когда пользователю предоставляется слово из 5 букв, такое как BB42A, которое является случайным, и пользователь должен ввести текст, прежде чем он сможет отправить форму.

Я немного погуглил, но не нашел ничего подходящего в Интернете.

Есть предложения? Спасибо

Тот, что внизу, довольно хорош: http://mattbrett.com/portfolio/hire/

Ответы [ 4 ]

3 голосов
/ 25 июля 2011

Я бы предложил использовать существующую библиотеку CAPTCHA или службу, а не использовать собственную. Нет смысла заново изобретать колесо.

Одним из лучших является reCAPTCHA. Вот хороший учебник по реализации reCAPTCHA в Cake.

1 голос
/ 26 июля 2011

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

Попробуйте добавить к вашему виду:

//call it something along the lines of 'name' or 'email', and the
//real form field 'x1' or 'x2' etc
$this-Form->input('aformfield', array('class' => 'aformfield');

Убедитесь, что вы прячете это в своем CSS:

.aformfield{display:none;}

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

if(!empty($this->data['Model']['aformfield'])){
    $this->Session->setFlash('You shouldn\'t be able to fill out a hidden field');
    $this->redirect($this->referrer());
}

Это не пуленепробиваемый, и я уверен, что спам-боты будут найдут способ обойти это, но это хорошее место для начала, если вы не хотите делать капчи.

1 голос
/ 25 июля 2011

Вы можете использовать действительные / пассивные капчи с простыми математическими вопросами, такими как 2 + 3 http://www.dereuromark.de/2010/08/09/how-to-implement-captchas-properly/

насколько безопасным должно быть ваше решение.для большинства сайтов этого более чем достаточно.

0 голосов
/ 25 июля 2011

То, что вам нужно, называется captcha.

В поиске Google для cakePHP + captcha должны появиться некоторые плагины cakePHP.Я не занимаюсь разработкой в ​​cakePHP, поэтому не могу рассказать больше.

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

  • Генерация случайной строки;
  • создание изображения с этой строкой ( функция imagecreate на php.net );
  • сохранить строку как переменную сеанса;
  • сравнить данные, отправленные пользователем, с данными, сохраненными в сеансе.

Код:

<?php
session_start();    

function rand_str($length = 6,
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890')
{
    $chars_length = (strlen($chars) - 1);
    $string = $chars{rand(0, $chars_length)};
    // Generate random string
    for ($i = 1; $i < $length; $i = strlen($string))
    {
        // Grab a random character from list
        $r = $chars{rand(0, $chars_length)};
        // Make sure the same two characters don't appear next to each other
        if ($r != $string{$i - 1}) $string .=  $r;
    }
    return $string;
}

header("Content-Type: image/png");
$im = @imagecreate(100, 40) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 0, 0, 0); // black
$text_color = imagecolorallocate($im, 255, 255,255); // white

$random_string = rand_str();
$_SESSION['captcha'] = $random_string;

imagestring($im, 5, 5, 5,  $random_string, $text_color);
imagepng($im);
imagedestroy($im);

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...