Добавяне на капча

Federal

New member
Нуждая се от помощ.
Скрипта, който използвам за обратна връзка е без защита срещу спам и ежедневно получавам нежелани имейли пълни с линкове. Какво трябва да се добави?

скрипта е:

PHP:
<?php 
// declare values 
$contact_email = $_POST['EmailAddress']; 
$contact_subject = $_POST['Subject']; 
$contact_name = $_POST['FullName']; 
$contact_message = $_POST['Message']; 
$mydate = date ( 'l, F d Y g:i A',time()+240 ); 


// where to send e-mail to 
$to = 'имейл'; //тук въведете вашия e-mail (на който искате потребителите да изпращате e-mail) 

// e-mail subject 
$subject = "Съобщение от потребител"; //тук на мястото на domain въведете името (не url-a) на вашия сайт 

// e-mail message 
$message = "Съобщение от потребител:\r\n" //тук на мястото на domain отново въведете името (не url-a) на вашия сайт 


."----------------------------------------------------------------\r\n" 
."Име: $contact_name\r\n" 
."Тема: $contact_subject\r\n" 
."Дата: $mydate\r\n" 
."От IP: {$_SERVER['REMOTE_ADDR']}\r\n\r\n" 
."<b>Съобщение:</b> $contact_message\r\n" 
."Form Address: {$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"; 

$headers = "From: $contact_name <$contact_email>\n" 
."Reply-To: $contact_email\n" 
."X-Mailer: PHP/".phpversion()
.'MIME-Version: 1.0'."\n"
.'Content-Type: text/plain; charset="windows-1251"'."\n"
.'Content-Transfer-Encoding: 8bit'."\n\n";

// check for validation, then send the e-mail 
if(empty($contact_name) || empty($contact_email) || empty($contact_subject) || empty($contact_message)) { 
echo '<p> текст<b>Изпрати</b>!<br/><br/> Текст.</p> 
<form method="post" action=""> 
<table id="Form-Details"> 
<tbody> 
<tr><td>Вашето име:</td><td><input type="text" name="FullName" size="20" /></td><br> 
<tr><td>Вашият е-mail:</td><td colspan="3"><input type="text" name="EmailAddress" size="20" /></td></tr><br> 
<td>Тема:</td><td><input type="text" name="Subject" size="20" /></td></tr> 
<tr><td colspan="4">Съобщение:</td></tr> 
<tr><td colspan="4"><textarea rows="6" name="Message" cols="47" class="input"></textarea></td></tr> 
<tr><td colspan="4" class="right1"><input type="submit" value="Изпрати" /><input type="reset" value="Изчисти" /></td></tr> 
</tbody> 
</table> 
</form>'; 
} elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $contact_email)) { 
echo "<p>Грешка: Моля въведете валиден e-mail.</p>"; 
} else { 
mail( $to, $subject, $message, $headers ); 
echo "<h3>Съобщението беше успешно изпратено!</h3><p>Благодаря Ви $contact_name,<br /><br />Възможно най-скоро ще отговоря на вашето съобщение на e-mail $contact_email.<br />";
} 
?>
 
За: Добавяне на капча

За: Добавяне на капча

Има един много як трик. Слагаш на формуляра за action невалиден адрес, а на бутона за пращане слагаш при посочване да се сменя стойността на action с реалния адрес. Единствено няма да работи ако човека не работи с мишка а с клавиатурата навигира във формуляра ти чрез tab и space. Но това според мен не е проблем.
 
За: Добавяне на капча

За: Добавяне на капча

Примерно това:

PHP:
<?php

if(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != $_SERVER['HTTP_HOST']) {
	die('Error: Please enable referrers in your browser!');
}

?>

Всъщност това е прозорчето, което се появява с букви и числа ли?
 
За: Добавяне на капча

За: Добавяне на капча

Federal, доработих ти леко скрипта и съм тествал това, което ти давам. Направо подмени съдържанието на сегашния си файл, с това, което направих и си гледай кефа. 🙂

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Contact form</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <script type="text/javascript">
    var a = Math.ceil(Math.random() * 10);
    var b = Math.ceil(Math.random() * 10);       
    var c = a + b
    function DrawBotBoot()
    {
        document.write("What is "+ a + " + " + b +"? ");
        document.write("<input id='BotBootInput' type='text' maxlength='2' size='2'/>");
    }    
    function ValidBotBoot(){
        var d = document.getElementById('BotBootInput').value;
        if (d == c) return true;        
        return false;
        
    }
    </script>
</head>
<body>
<?php 
// declare values 
$contact_email = $_POST['EmailAddress']; 
$contact_subject = $_POST['Subject']; 
$contact_name = $_POST['FullName']; 
$contact_message = $_POST['Message']; 
$mydate = date ( 'l, F d Y g:i A',time()+240 ); 


// where to send e-mail to 
$to = 'имейл'; //тук въведете вашия e-mail (на който искате потребителите да изпращате e-mail) 

// e-mail subject 
$subject = "Съобщение от потребител"; //тук на мястото на domain въведете името (не url-a) на вашия сайт 

// e-mail message 
$message = "Съобщение от потребител:\r\n" //тук на мястото на domain отново въведете името (не url-a) на вашия сайт 


."----------------------------------------------------------------\r\n" 
."Име: $contact_name\r\n" 
."Тема: $contact_subject\r\n" 
."Дата: $mydate\r\n" 
."От IP: {$_SERVER['REMOTE_ADDR']}\r\n\r\n" 
."<b>Съобщение:</b> $contact_message\r\n" 
."Form Address: {$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"; 

$headers = "From: $contact_name <$contact_email>\n" 
."Reply-To: $contact_email\n" 
."X-Mailer: PHP/".phpversion()
.'MIME-Version: 1.0'."\n"
.'Content-Type: text/plain; charset="windows-1251"'."\n"
.'Content-Transfer-Encoding: 8bit'."\n\n";

// check for validation, then send the e-mail 
if(empty($contact_name) || empty($contact_email) || empty($contact_subject) || empty($contact_message)) { 
echo '<p> текст <b>Изпрати</b>!<br/><br/> Текст.</p> 

<form method="post"  onsubmit="return ValidBotBoot();" action=""> 
<table id="Form-Details"> 
<tbody> 
<tr><td>Вашето име:</td><td><input type="text" name="FullName" size="20" /></td><br> 
<tr><td>Вашият е-mail:</td><td colspan="3"><input type="text" name="EmailAddress" size="20" /></td></tr><br> 
<td>Тема:</td><td><input type="text" name="Subject" size="20" /></td></tr> 
<tr><td colspan="4">Съобщение:</td></tr> 
<tr><td colspan="4"><textarea rows="6" name="Message" cols="47" class="input"></textarea></td></tr> 
<tr>
<td colspan="4" class="right1"><script type="text/javascript">DrawBotBoot()</script>  <input type="submit" value="Изпрати" /><input type="reset" value="Изчисти" /></td></tr> 
</tbody> 
</table> 
</form>'; 
} elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $contact_email)) { 
echo "<p>Грешка: Моля въведете валиден e-mail.</p>"; 
} else { 
mail( $to, $subject, $message, $headers ); 
echo "<h3>Съобщението беше успешно изпратено!</h3><p>Благодаря Ви, $contact_name,<br /><br />Възможно най-скоро ще отговоря на вашето съобщение на e-mail $contact_email.<br />";
} 
?></body></html>
Докато не отговориш на въпроса, писмото не се изпраща.
 
Последно редактирано:
За: Добавяне на капча

За: Добавяне на капча

diabolic.bg Благодаря ти за помощта! Пуснах скрипта. Ще пиша веднага, щом мине малко време. 🙂
 
За: Добавяне на капча

За: Добавяне на капча

diabolic.bg Благодаря ти за помощта! Пуснах скрипта. Ще пиша веднага, щом мине малко време. 🙂
Дано да съм ти помогнал. Иначе мисля, че ще останеш доволен. Тази капча ползвам от 26.11.2009 до днес и нямам нито един пробив. Но ми се струва, че малко трябва да пипнеш оформлението на текста по формата. Вместо този надпис отгоре, по-добре според мен де пише нещо от сорта "Моля, изпратете ни Вашето съобщение!".
 
За: Добавяне на капча

За: Добавяне на капча

Мерси, ще го коригирам. Аз използвам скрипта и за добавяне на статии. Буквално през 2-3 мин. Оутлуук пищеше от нови мейли, които обаче се оказваха спам.
 
Последно редактирано:
За: Добавяне на капча

За: Добавяне на капча

Искаш да кажеш, че спам ботовете са пробили капчата ли? Трудно мога да си го представя. Повечето ботове не поддържат джава скрипт, а докато не се изпълни скрипта, няма как да се постне. Чудно...

Опитай тогава това - http://identipic.com/ Вижда ми се доста сериозно.
 
Последно редактирано:
За: Добавяне на капча

За: Добавяне на капча

Грешка, до сега използах формата без капчата. Сега от теб е вземах. Сега няма нищо още, но ще пиша.
 
За: Добавяне на капча

За: Добавяне на капча

Щом я ползваш и за пускане на коментари, може да се наложи лека корекция в скрипта, но трябва само да премахнеш (евентуално) ХТМЛ частта, като вкараш в хедъра на сайта си тази част от джава скрипта:
Код:
<script type="text/javascript">
    var a = Math.ceil(Math.random() * 10);
    var b = Math.ceil(Math.random() * 10);       
    var c = a + b
    function DrawBotBoot()
    {
        document.write("What is "+ a + " + " + b +"? ");
        document.write("<input id='BotBootInput' type='text' maxlength='2' size='2'/>");
    }    
    function ValidBotBoot(){
        var d = document.getElementById('BotBootInput').value;
        if (d == c) return true;        
        return false;
        
    }
    </script>
Другото между
Код:
<?php и ?>
не е нужно да променяш.
 
За: Добавяне на капча

За: Добавяне на капча

Проби я капчата, руски бот с линкове. Освен, ако не е човек.
 
За: Добавяне на капча

За: Добавяне на капча

Ами, както ти писах вече, ако тази не става, опитай другата с картинките. Там няма как бот да ти ползва падащите менюта и да избира от тях. Поне ще си сигурен, че те спами човек, което не е невъзможно - както разни пубери кликат реклами като бесни с надеждата да изкарат пари, така е и с платения спам.
 
За: Добавяне на капча

За: Добавяне на капча

Нещо не мога да го разбера как става тази с картинките. Иначе капачката държи за сега. От вчера има само 2 изпуснати. Дано се справи. 🙂
 
За: Добавяне на капча

За: Добавяне на капча

Ами, понапъни се малко. 🙂 Днес имам друга работа, нищо, че е празник, и нямам време да ти направя целия скрипт отново. По метода на пробите и грешките ще го сглобиш.
 
За: Добавяне на капча

За: Добавяне на капча

Намаляха. От днес няма спам 🙂
 
За: Добавяне на капча

За: Добавяне на капча

Радвам се! Както ти казах, от 2009 година досега нямам пробив на тази капча, освен, ако спамърът не е човек, но тях само огнепръскачка ги спира... :happy:
 
За: Добавяне на капча

За: Добавяне на капча

Капчата изпуска спам. Ако има към друга форма да ме насочите?
 

Back
Горе