нужна помощь, чтобы добавить контактную форму с капчей

Привет, я новичок в PHP, и мне нужна помощь. Я создал контактную форму и хочу добавить капчу. Я создал несколько изображений в формате gif, к которым добавлены числа с некоторым шумом, и назвал code_01.gif для № 1, code_02.gif для № 2 и т. д. и т. д. Я поместил некоторые из них в свою форму статически для целей отображения, подобных этому. :

<img src="images/code_01.gif" />
<img src="images/code_07.gif" />
<img src="images/code_01.gif" />
<img src="images/code_08.gif" />
<img src="images/code_03.gif" />
<img src="images/code_07.gif" />
<input name="captcha" type="text" id="captcha" />

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

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


person ltdev    schedule 12.07.2012    source источник
comment
Вы гуглили капчи? и как их создать?   -  person Jon Taylor    schedule 12.07.2012
comment
@ Lykos22 Посмотрите мой ответ и посмотрите, все ли в порядке?   -  person Praveen Kumar Purushothaman    schedule 12.07.2012


Ответы (3)


Простая PHP-капча

Это один из самых простых скриптов CAPTCHA, которые вы когда-либо использовали. Хотя он не скрывает текст, он хорошо послужит своей цели для многих людей, которым нужно низкоуровневое решение CAPTCHA. Этот скрипт практически не требует настройки. Единственная зависимость — библиотека PHP GD.

Это может быть так просто в использовании, но это также настраивается:

<?php

session_start();
include("captcha.php");
$_SESSION['captcha'] = captcha();

echo '<img src="' . $_SESSION['captcha']['image_src'] . '" alt="CAPTCHA" />';

?>

Демонстрация: http://labs.abeautifulsite.net/simple-php-captcha/

person Praveen Kumar Purushothaman    schedule 12.07.2012

Вы также можете использовать это: Securimage

Securimage — это бесплатный сценарий PHP CAPTCHA с открытым исходным кодом для создания сложных изображений и кодов CAPTCHA для защиты форм от спама и злоупотреблений. Его можно легко добавить в существующие формы на вашем сайте для защиты от спам-ботов. Он может работать практически на любом веб-сервере, если у вас установлен PHP и поддерживается GD в PHP. Securimage делает все, от генерации изображений CAPTCHA до проверки введенного кода. Звуковые коды могут передаваться в браузер с помощью Flash для слабовидящих.

person Community    schedule 13.07.2012

Вот простая математическая капта, которую я давно нашел.
Преимущества:
 – Нет изображений, поэтому меньше используется пропускная способность.
 – Нет внешней зависимости. .

ПРОЦЕСС ПРОЦЕССА

In form.php:

  1. Выберите одно случайное число $n1
  2. Выберите другое случайное число $n2
  3. Вычислите $n1 и $n2 с помощью различных математических операций и сохраните их как $result, чтобы результирующее число было непредсказуемым и не выровнялось с $n1+$n2
  4. Эхо "Что такое $n1 + $n2?"
  5. Попросите пользователя ввести ответ на вопрос, заданный на шаге 4.
  6. Добавьте $result в качестве скрытого значения в форму.
  7. При отправке значения $_POST обрабатываются check.php.

In check.php:

  1. Если установлено $_POST["answer"], сохраните его в $answer
  2. Вычислите $answer таким же образом, как это было вычислено на шаге 3 из form.php.
  3. Теперь, если $answer равно $_POST["result"], подтверждается, что пользователь является человеком.

Имейте в виду, что $answer — это ответ, отправленный пользователем, а $result — это наш результат после выполнения математических операций над $answer.

КОД:

Файл:form.php

<?php

$n1 = rand(1,15);
$n2 = rand(1,15);
//start making our result unpredictable & non-aligned with hidden value
$result = $n1+$n2;
$result = ($result*3)-2;
$result = ($result+4)*5;
$question="what is $n1 + $n2?";
?>
<form method="post" action="check.php">
<?php echo $question.PHP_EOL; ?>
<input name="answer" type="text"><br />
<input type="hidden" name="result" value="<?php echo $result; ?>">
</form>

Файл:check.php

<?php

if(isset($_POST["answer")){
    $answer = $_POST["answer"];
    // start doing same math on $answer
    $answer = ($answer*3)-2;
    $answer = ($answer+4)*5;
    if($answer == $_POST["result"]{
        // echo Hurray, you are Human..
        // Do anything here.. 
    }else{
        echo "Wrong Answer";
    }

http://codepad.org/2MtULNhZ

Ключ в том, чтобы усложнить формулу кодирования и декодирования. Чтобы кто-то, глядя на hidden form value result и Question, не обнаружил отношения между ними обоими.

person DavChana    schedule 17.07.2012
comment
Пожалуйста, просмотрите свой ответ, потому что он пронизан ошибками. Я внесу изменения, чтобы исправить синтаксические ошибки, однако я не понимаю, как это может работать. Что, если я просто создам бота, который читает два числа после «Что такое» из HTML и отправляет их сумму?! - person Daniel Szalay; 01.10.2012
comment
@DanielSzalay Я выделил термин ПРОСТОЙ в своем ответе. Это просто базовая техника. Кстати, я не вижу никаких синтаксических ошибок. и я собираюсь добавить процесс потока в свой ответ. Процесс усложнения взлома, а затем еще более сложного взлома — это игра в мышь и кошку. Итак, если вы создадите бота, который читает два числа после «Что из HTML», можно просто использовать изображения чисел вместо чисел в виде обычного текста. Тогда вы могли бы найти какой-то другой путь, и, таким образом, процесс будет продолжаться. - person DavChana; 09.11.2012