Как сделать свою капчу и зачем?
Причин много может быть, не нравятся стандартные решения и прочее.
Уязвимость собственных капч заключается в том, что они слишком сложны для сервера (создание и обработка). Конечно, можно генерировать и держать сотню в кэше, а можно подзапариться сделать готовые картинки и выдавать их, решение не ахти, зато код простой)
Страничка первая (капча, поле, кнопка, js предобработка (про что многие забывают и из-за капчи все поля заполнять по новой часто приходится, да и серверу меньше проблем) (ком. писал здесь в скрипте не должно быть)
2 файл обработка:
итог:
+ нагрузка минимальна, от ботов избавимся (ну картики сами намалюйте ужасные, мои OCR не прочёл)
+ главную проблему с ботами решит
- js в первом файле выдает всю базу (ниже объяню), хотя можно убрать, но пользователям хуже.
слитие массива ответов даст обход капчи злоумышлинникам, умелый срипт и им просто поф на капчу, т.к. тут прямая зависимость от выводимой картинки и ответа. но на это можно наплювать, если кто-то захочет насолить, насолят.
не советую лезть в дебри склеивать и размывать цифры средствами php, php не предназначен для таких махинаций (хотя все юзают итог 503 ошибка)
ЭМ... много людей (года 2 назад по себе знал) не поймут как установить:
1.
между <head> и </head> вставляем
2. перед формой
3. Находим у своей формы:
меняем ">" на:
если было name у формы до этого удалите (если роли не играло)
4. в форму перед последним <input (тот отвечает за отправку)
5. на странице обработки должен быть тег <? или <?php после вставим:
6. найдем у себя в реге else if и перед этим else if стоит } вот после добавим:
всё.
p.s. это сделает регу солиднее, защиту же вы получите грошовую, легко обходимую (хотя придется написать ещё скрипт для обхода, какому спамеру ради нескольких проектов это надо? в любом случее избавитесь от "гуляющих" спам роботов)
p.s.s. не обязательно цифры, можете буквы, вопросы и т.п. в капчу пихать
Причин много может быть, не нравятся стандартные решения и прочее.
Уязвимость собственных капч заключается в том, что они слишком сложны для сервера (создание и обработка). Конечно, можно генерировать и держать сотню в кэше, а можно подзапариться сделать готовые картинки и выдавать их, решение не ахти, зато код простой)
Страничка первая (капча, поле, кнопка, 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=" Регистрация ">
</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>
2. перед формой
PHP:
<?
$a=Rand(0,9);
echo '<img src="cap/'.$a.'.png">';
?>
3. Находим у своей формы:
HTML:
<form здесь много букофф>
HTML:
name="form" onsubmit="return validate()">
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. не обязательно цифры, можете буквы, вопросы и т.п. в капчу пихать
Вложения
Последнее редактирование: