своя капча

ghang

Любопытный
Пользователь
19 Авг 2012
140
40
28
34
a-pw.ru
Как сделать свою капчу и зачем?
Причин много может быть, не нравятся стандартные решения и прочее.
Уязвимость собственных капч заключается в том, что они слишком сложны для сервера (создание и обработка). Конечно, можно генерировать и держать сотню в кэше, а можно подзапариться сделать готовые картинки и выдавать их, решение не ахти, зато код простой)

Страничка первая (капча, поле, кнопка, js предобработка (про что многие забывают и из-за капчи все поля заполнять по новой часто приходится, да и серверу меньше проблем) (ком. писал здесь в скрипте не должно быть)
HTML:
<script type='text/javascript'>
function validate(){
var x=document.forms['form']['ca'].value;
var s=document.forms['form']['ca2'].value;
var array = ['67890','10260','10520','16487','17145','19872','25854','32002','32545','55441']; //картинки по порядку начиная с 0.png, значение это данные, т.е. 67890 написано в картике 0.png
n=array[s];
if (x!==n){
document.getElementById('caf').innerHTML='*Неверное проверочное число';
return false;
}
}
</script>
<center><?
$a=Rand(0,9);//выборка картинок с 0 по 9 (я всего 9 нарисовал, хотите рисуйте больше)
echo '<img src="cap/'.$a.'.png">';
?>
<form action="2.php" method="post" name="form" onsubmit="return validate()">
<br><br>
<input type="text" name="ca" class="pole"><br><span style='color:#C40003' id='caf'></span><br>
<input type="hidden" name="ca2" class="pole" value="<? echo $a;?>">
<input class="menu" style="font-size:18px; PADDING:4PX; background: rgba(200, 100, 100, 0.05); border-radius:1px ; border:none;" type="submit" name="submit" value="&nbsp;&nbsp;Регистрация&nbsp;&nbsp;">
</form>
</center>

2 файл обработка:
PHP:
<?
$mass = array('67890','10260','10520','16487','17145','19872','25854','32002','32545','55441');//тот же массив
$s=$_POST['ca2'];
$s=$mass[$s];
if($_POST['ca']==$s){ echo '0k';}else{ echo 'n0';};//условие. вы можете добавить в свою регу else if к проверкам просто и всё
?>

итог:
+ нагрузка минимальна, от ботов избавимся (ну картики сами намалюйте ужасные, мои OCR не прочёл)
+ главную проблему с ботами решит
- js в первом файле выдает всю базу (ниже объяню), хотя можно убрать, но пользователям хуже.

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

не советую лезть в дебри склеивать и размывать цифры средствами php, php не предназначен для таких махинаций (хотя все юзают итог 503 ошибка)

ЭМ... много людей (года 2 назад по себе знал) не поймут как установить:
1.
HTML:
<script type='text/javascript'>
function validate(){
var x=document.forms['form']['ca'].value;
var s=document.forms['form']['ca2'].value;
var array = ['67890','10260','10520','16487','17145','19872','25854','32002','32545','55441'];
n=array[s];
if (x!==n){
document.getElementById('caf').innerHTML='*Неверное проверочное число';
return false;
}
}
 
</script>
между <head> и </head> вставляем

2. перед формой
PHP:
<?
 
$a=Rand(0,9);
echo '<img src="cap/'.$a.'.png">';
 
?>

3. Находим у своей формы:
HTML:
<form здесь много букофф>
меняем ">" на:
HTML:
name="form" onsubmit="return validate()">
если было name у формы до этого удалите (если роли не играло)

4. в форму перед последним <input (тот отвечает за отправку)
HTML:
<input type="text" name="ca" class="pole"><br><span style='color:#C40003' id='caf'></span><br>
<input type="hidden" name="ca2" class="pole" value="<? echo $a;?>">

5. на странице обработки должен быть тег <? или <?php после вставим:
PHP:
$mass = array('67890','10260','10520','16487','17145','19872','25854','32002','32545','55441');
$s=$_POST['ca2'];
$s=$mass[$s];

6. найдем у себя в реге else if и перед этим else if стоит } вот после добавим:
PHP:
else if($_POST['ca']!==$s){ echo 'вы не правильно выполнили проверку';}

всё.

p.s. это сделает регу солиднее, защиту же вы получите грошовую, легко обходимую (хотя придется написать ещё скрипт для обхода, какому спамеру ради нескольких проектов это надо? в любом случее избавитесь от "гуляющих" спам роботов)
p.s.s. не обязательно цифры, можете буквы, вопросы и т.п. в капчу пихать
 

Вложения

  • cap.rar
    130 KB · Просмотры: 15
Последнее редактирование:
  • Like
Реакции: Kn1fe

Пользователи онлайн

Сейчас на форуме нет ни одного пользователя.

Последние ресурсы

Статистика форума

Темы
3.838
Сообщения
21.202
Пользователи
7.615
Новый пользователь
saneawot11