У меня есть вопрос. Недавно один из моих сайтов подвергся массовой DDos - атаке на скрипт формирования капчи.
Обращение шло прямо к файлу, который создает капчу http://site.ru/capcha/index.php:
session_start();
$secret_code=rand(1000,9999);
$symbols=array("D","F","G","I","J","L",& quot;Q","R","S","U","V","W","Z",&quo t;1","2","3","4","5","6","7","8 ","9");
$cn=count($symbols);
$secret_code=$symbols[rand(0,$cn-1)].$symbols[rand(0,$cn-1)].$symbols[rand(0,$cn-1)].$symbols[rand(0,$cn-1)];
$_SESSION['secret_code']=$secret_code;
$code=$_SERVER['DOCUMENT_ROOT']."/capcha/".rand(1,8).".png";
$im = imagecreatefrompng($code);
$color1=rand(50,100);
$color2=rand(50,100);
$color3=rand(50,100);
$color4=rand(50,100);
$black[0] = imagecolorallocate($im, $color1, $color1, $color1);
$black[1] = imagecolorallocate($im, $color2, $color2, $color2);
$black[2] = imagecolorallocate($im, $color3, $color3, $color3);
$black[3] = imagecolorallocate($im, $color4, $color4, $color4);
$font = $_SERVER['DOCUMENT_ROOT'].'/capcha/georgia.ttf';
$secret_code="".$secret_code;
imagettftext($im, rand(18,30), rand(-20,20), 20, rand(28,36), $black[0], $font, $secret_code[0]);
imagettftext($im, rand(18,30), rand(-20,20), 50, rand(28,36), $black[1], $font, $secret_code[1]);
imagettftext($im, rand(18,30), rand(-20,20), 80, rand(28,36), $black[2], $font, $secret_code[2]);
imagettftext($im, rand(18,30), rand(-20,20), 110, rand(28,36), $black[3], $font, $secret_code[3]);
header('Content-Type: image/gif');
imagegif ($im,'',70);
imagedestroy ($im);
Прочитав инфу, я поняла, что без скрипта php, который формирует эту картинку не обойтись:
<img src='/capcha/index.php'>
Когда я из браузера обращаюсь на прямую к этому скрипту, он выдает мне картинку.
Мне нужно вернуть капчу назад, но если я создам подобие того, что было, сайт будут продолжать атаковать уже по новому генератору картинки.
Что может в этом случае так класть сервер? Много открытых сессий?
Спустя 13 минут, 51 секунда (27.03.2012 - 12:02) Visman написал(а):
Используй нестандартные варианты защиты при регистрации.
Генерация полей формы через яваскрипт, например.
Или текстовый вопрос. Или просьба поставить галку. Или выбрать пункт из списка.
Генерация полей формы через яваскрипт, например.
Или текстовый вопрос. Или просьба поставить галку. Или выбрать пункт из списка.
Спустя 6 минут, 13 секунд (27.03.2012 - 12:08) I++ написал(а):
Попробуйте заменить свою каптчу на эту:
http://www.google.com/recaptcha
Многие противники этой каптчи, по известным многим причине. Но на моих проектах решилось много проблем, после её установки. Правдо хом.. т.е пользователи, иногда испытывали проблемы с регистрацией, но 10% пользователей меня мало волнует.
http://www.google.com/recaptcha
Многие противники этой каптчи, по известным многим причине. Но на моих проектах решилось много проблем, после её установки. Правдо хом.. т.е пользователи, иногда испытывали проблемы с регистрацией, но 10% пользователей меня мало волнует.
Спустя 1 минута, 50 секунд (27.03.2012 - 12:10) olya-kowka написал(а):
Visman, идея совсем избавиться от каптчи мне нравится.
А можно поподробнее, например, про все варианты?
Я искала какие-то эквиваленты на javascript. То есть какая-то динамика при загрузке формы есть, а как ее проверять?
А можно поподробнее, например, про все варианты?

Я искала какие-то эквиваленты на javascript. То есть какая-то динамика при загрузке формы есть, а как ее проверять?
Спустя 41 секунда (27.03.2012 - 12:10) olya-kowka написал(а):
I++, спасибо, почитаю.
Спустя 3 минуты, 57 секунд (27.03.2012 - 12:14) killer8080 написал(а):
Делать защиту от DDoS на уровне PHP практически бессмысленно. Скрипт капчи не настолько уж ресурса емкий, с таким же успехом можно за досить любой скрипт на вашем сайте, а можно и вообще на сетевом уровне, так что возвращайте капчу назад и не парьтесь. Захотят вас повторно атаковать, все равно завалят. Такие вопросы должны решать админы хостинга.
Спустя 8 минут, 28 секунд (27.03.2012 - 12:23) FatCat написал(а):
Цитата (olya-kowka @ 27.03.2012 - 12:48) |
если я создам подобие того, что было, сайт будут продолжать атаковать уже по новому генератору картинки |
Да, дешевые атаки делаются http-запросами к самым нагрузочным скриптам, чтобы быстрее исчерпать лимиты ресурсов сервера.
Но и отбиваются такие атаки довольно легко:
1. Пишем в БД или в файлы айпишники и время последнего обращения.
2. Сравниваем текущее время и сохраненное с прошлого обращения с этого айпишника. Здесь у нас появляется первый регулировочный параметр: время между обращениями. Настраиваем пороговое значение; ниже которого данный айпишник получает плюсовой балл; если же время больше 15 минут, прошлые баллы обнуляем.
3. Второй регулировочный параметр: число баллов, выше которого айпишник добавляется в эйчтиакцесс, чтобы минимизировать затраты ресурсов на бан этого айпишника.
Таким образом, играя величинами этих двух настроечных параметров, удается и атаку отбить, и нормальным посетителям не затруднять доступ к сайту.
Цитата (olya-kowka @ 27.03.2012 - 13:10) |
идея совсем избавиться от каптчи мне нравится |
Напрасно. Посмотрите у нас здесь, даже гостям можно писать без капчи, регистрация тоже без капчи, а ботов нет. Джаваскрипт-защита - это прежде всего удобство для посетителей.
Цитата (killer8080 @ 27.03.2012 - 13:14) |
Захотят вас повторно атаковать, все равно завалят. Такие вопросы должны решать админы хостинга. |
Если пинг-атакой валят шлюз, безусловно, только администратор хостинга тут справится.
Если же плотность атаки несколько десятков http-запросов в секунду, а именно таки атаки бывают в 99% случаев - тут и php отлично защищает. ;) Проверено этим форумом. Скажу по секрету, дос-ят по несколько часов раз 10 в месяц; обычно это если и заметно, то в виде 2-3 секунд ожидания генерации страниц да по огромным эррорлогам.
Вот из последнего:
[Tue Mar 27 02:41:19 2012] [error] [client 91.217.178.228] client denied by server configuration: /home/user/phpforum.ru/index.php
[Tue Mar 27 02:41:19 2012] [error] [client 91.217.178.228] client denied by server configuration: /home/user/phpforum.ru
[Tue Mar 27 02:41:20 2012] [error] [client 91.217.178.228] client denied by server configuration: /home/user/phpforum.ru
Тупо долбился с одного айпишника как из пулемета. А может заснул носом на клавише F5.
Не беда, через 240 часов сработает авторазбанивалка.
Спустя 3 минуты, 14 секунд (27.03.2012 - 12:26) FatCat написал(а):
Конечно всё тут малость посложней. И механизм опознания и вывода из-под бана людей и поисковых ботов нужен, и механизм очистки базы от старых опознаваний. Но ничего принципиально сложного.
Спустя 17 минут, 31 секунда (27.03.2012 - 12:44) Visman написал(а):
olya-kowka
Части формы кодирую в php функцией base64_encode.
А яваскрипт раскодирую закодированное через функцию
Части формы кодирую в php функцией base64_encode.
А яваскрипт раскодирую закодированное через функцию
function base64decode( data ) {
// Decodes string using MIME base64 algorithm
//
// version: 903.3016
// discuss at: http://phpjs.org/functions/base64_decode
// + original by: Tyler Akins (http://rumkin.com)
// + improved by: Thunder.m
// + input by: Aman Gupta
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// + bugfixed by: Pellentesque Malesuada
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + input by: Brett Zamir (http://brettz9.blogspot.com)
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// - depends on: utf8_decode
// * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
// * returns 1: 'Kevin van Zonneveld'
// mozilla has this native
// - but breaks in 2.0.0.12!
//if (typeof window['btoa'] == 'function') {
// return btoa(data);
//}
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = [];
if (!data) {
return data;
}
data += '';
do { // unpack four hexets into three octets using index points in b64
h1 = b64.indexOf(data.charAt(i++));
h2 = b64.indexOf(data.charAt(i++));
h3 = b64.indexOf(data.charAt(i++));
h4 = b64.indexOf(data.charAt(i++));
bits = h1<<18 | h2<<12 | h3<<6 | h4;
o1 = bits>>16 & 0xff;
o2 = bits>>8 & 0xff;
o3 = bits & 0xff;
if (h3 == 64) {
tmp_arr[ac++] = String.fromCharCode(o1);
} else if (h4 == 64) {
tmp_arr[ac++] = String.fromCharCode(o1, o2);
} else {
tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
}
} while (i < data.length);
dec = tmp_arr.join('');
//dec = utf8_decode(dec);
return dec;
}
Спустя 11 минут, 56 секунд (27.03.2012 - 12:55) olya-kowka написал(а):
FatCat, вот нынешняя атака очень массовая. И количество адресов, с которых идет атака, очень большое....
Спустя 4 минуты, 34 секунды (27.03.2012 - 13:00) olya-kowka написал(а):
Visman, я не до конца понимаю...
Допустим, я генерирую какую-то последовательность и выставляю ее в форме. Пользователь вводит в поле эту последовательность, я получаю ее POST.
На каком этапе происходит кодирование/раскодирование и проверка?
На стороне клиента происходит проверка при нажатии кнопки, как любая проверка формы? И где хранится сгененированное значение для проверки?
Допустим, я генерирую какую-то последовательность и выставляю ее в форме. Пользователь вводит в поле эту последовательность, я получаю ее POST.
На каком этапе происходит кодирование/раскодирование и проверка?
На стороне клиента происходит проверка при нажатии кнопки, как любая проверка формы? И где хранится сгененированное значение для проверки?
Спустя 6 минут, 46 секунд (27.03.2012 - 13:07) Visman написал(а):
Нет я написал про кодирование формы черех яваскрипт.
Например выводиться в php в форму
я заменяю такой вывод на
и для робота, который сканирует страницу этот элемент формы не виден (если он javascript не исполняет), соответственно приходят от него неполные данные по форме и регистрацию он не проходит.
Например выводиться в php в форму
<input type="checkbox" name="not_robot" value="1" tabindex="4" />
я заменяю такой вывод на
<script type="text/javascript">document.write(base64decode('<?php echo base64_encode('<input type="checkbox" name="not_robot" value="1" tabindex="4" />'); ?>'));</script>
и для робота, который сканирует страницу этот элемент формы не виден (если он javascript не исполняет), соответственно приходят от него неполные данные по форме и регистрацию он не проходит.
Спустя 16 минут, 19 секунд (27.03.2012 - 13:23) olya-kowka написал(а):
Visman, да, теперь поняла.
То есть получается, что только заход из браузера интерпретирует корректно эту запись на js? И если я попробую скриптом посмотреть эту страницу, то получится, что js не будет виден?
С другой стороны, если хацкер будет отправлять POST запрос на форму, он может просечь, что надо передать значение checkbox в 1 и тогда все пройдет?
То есть получается, что только заход из браузера интерпретирует корректно эту запись на js? И если я попробую скриптом посмотреть эту страницу, то получится, что js не будет виден?
С другой стороны, если хацкер будет отправлять POST запрос на форму, он может просечь, что надо передать значение checkbox в 1 и тогда все пройдет?
Спустя 3 минуты, 40 секунд (27.03.2012 - 13:27) Visman написал(а):
Цитата (olya-kowka @ 27.03.2012 - 18:23) |
С другой стороны, если хацкер будет отправлять POST запрос на форму, он может просечь, что надо передать значение checkbox в 1 и тогда все пройдет? |
Если он вручную посмотрит, какие там поля скрыты, какие значения надо ввести, то пройдет.
Но у меня идет еще случайное задание имен полей в формах. Так что это дополнительные трудности для роботов создает.
Цитата (olya-kowka @ 27.03.2012 - 18:23) |
то получится, что js не будет виден? |
Скрипт то увидит js, но без его выполнения не поймет, что внутри спрятано.
Спустя 24 минуты, 42 секунды (27.03.2012 - 13:51) I++ написал(а):
Все это мягко говоря БОЯН с ява скриптами и другая мышиная возня.
Основная идея, снизить возможную нагрузку на "тяжелых" участках, которые жрут ресурсы. GDшка может жрать ресурсы.
FatCat отчасти прав, но так можно забанить и нормальных посетителей, на серых IP могут сидеть много народу.
Хотя можно минимизировать потери за счет geoip проверяя, кто откуда, если из китая, можно сразу в баню.
Все остальное, скрипты и остальная лабуда, лишь временная защита, которая обходится за пару минут.
Не ясно другое, атака направлена на забивание канала или исчерпание внутренних ресурсов выделенных хостером под проект.
Если забивание канала, то тут задача хостера.
Основная идея, снизить возможную нагрузку на "тяжелых" участках, которые жрут ресурсы. GDшка может жрать ресурсы.
FatCat отчасти прав, но так можно забанить и нормальных посетителей, на серых IP могут сидеть много народу.
Хотя можно минимизировать потери за счет geoip проверяя, кто откуда, если из китая, можно сразу в баню.
Все остальное, скрипты и остальная лабуда, лишь временная защита, которая обходится за пару минут.
Не ясно другое, атака направлена на забивание канала или исчерпание внутренних ресурсов выделенных хостером под проект.
Если забивание канала, то тут задача хостера.
Спустя 27 минут, 12 секунд (27.03.2012 - 14:19) Visman написал(а):
Цитата (I++ @ 27.03.2012 - 18:51) |
Все это мягко говоря БОЯН с ява скриптами и другая мышиная возня. |
Так js предлагается не как защита от ддоса, а как защита от спамеров для избавления от капчи.
Спустя 19 минут, 17 секунд (27.03.2012 - 14:38) olya-kowka написал(а):
I++, не очень правильно, на мой взгляд, банить сразу тех, кто из Китая ) Потому что там люди тоже хотят покупать какие-то товары.
Думаю, атака направлена на то, чтобы ресурс не работал, был не доступен для покупателей. Как это интерпретировать в Ваших словах, не знаю. Происки конкурентов )
Яваскрипт в данному случае, действительно, предложен в качестве альтренативы каптче.
Как быть, если GD жрет ресурсы... Ведь весь смысл каптчи в основном - это динамически созданная картинка....
Думаю, атака направлена на то, чтобы ресурс не работал, был не доступен для покупателей. Как это интерпретировать в Ваших словах, не знаю. Происки конкурентов )
Яваскрипт в данному случае, действительно, предложен в качестве альтренативы каптче.
Как быть, если GD жрет ресурсы... Ведь весь смысл каптчи в основном - это динамически созданная картинка....
Спустя 24 минуты, 59 секунд (27.03.2012 - 15:03) I++ написал(а):
Было бы не плохо узнать какого рода атака.
Возможно вообще нет никакой атаки, а просто хостинг такой веселый.
Вообще мне кажется, каптчу не спроста так дергают, есть боты которые пытаются её распознать, а если не получается, они её грузят по новой.
Если бы атака удалась, сайт был бы недоступен. Он доступен?
Возможно вообще нет никакой атаки, а просто хостинг такой веселый.
Вообще мне кажется, каптчу не спроста так дергают, есть боты которые пытаются её распознать, а если не получается, они её грузят по новой.
Если бы атака удалась, сайт был бы недоступен. Он доступен?
Свернутый текст
Был случай позвонили из яндекса и попросили не флудить, оказалось, человек заснул на клавиатуре находясь на странице поисковика, так получилось, что он обновлял страницу...
Спустя 8 минут, 9 секунд (27.03.2012 - 15:11) olya-kowka написал(а):
Цитата (I++ @ 27.03.2012 - 12:03) |
Если бы атака удалась, сайт был бы недоступен. Он доступен? |
Когда была атака, сайт выдавал 502 ошибку.
Утром происходили еще попытки обратиться по старому адресу /capcha/index.php, но поскольку фалы там пустые, то никакой проблемы на работу сайта это не оказывало.
С хостингом все нормально, админы отследили, что именно грузило сайт в тот день, было указан этот файл с капчей.
Спустя 2 минуты, 58 секунд (27.03.2012 - 15:14) Игорь_Vasinsky написал(а):
Visman
ну тыб JS base64_decode() тож выложил... а то бегай, ищи :rolleyes:
с чекбоксом - круто придумал, взял на вооружение, а вот если саму капчу так выводить???
такой же эффект.
ну тыб JS base64_decode() тож выложил... а то бегай, ищи :rolleyes:
Свернутый текст
<script type="text/javascript">
function base64_decode(data) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
do { // unpack four hexets into three octets using index points in b64
h1 = b64.indexOf(data.charAt(i++));
h2 = b64.indexOf(data.charAt(i++));
h3 = b64.indexOf(data.charAt(i++));
h4 = b64.indexOf(data.charAt(i++));
bits = h1<<18 | h2<<12 | h3<<6 | h4;
o1 = bits>>16 & 0xff;
o2 = bits>>8 & 0xff;
o3 = bits & 0xff;
if (h3 == 64) enc += String.fromCharCode(o1);
else if (h4 == 64) enc += String.fromCharCode(o1, o2);
else enc += String.fromCharCode(o1, o2, o3);
} while (i < data.length);
return enc;
}
</script>
с чекбоксом - круто придумал, взял на вооружение, а вот если саму капчу так выводить???
<script type="text/javascript">
document.write(base64_decode('<?=base64_encode('<img src="image.php?r=<?=rand(0,100)?>" id="code-image"/>'); ?>'));
</script>
такой же эффект.
Спустя 8 минут, 41 секунда (27.03.2012 - 15:23) Visman написал(а):
Цитата (Игорь_Vasinsky @ 27.03.2012 - 20:14) |
ну тыб JS base64_decode() тож выложил |
А я что выложил на предыдущей странице?

Спустя 2 минуты, 21 секунда (27.03.2012 - 15:25) Игорь_Vasinsky написал(а):
я имел ввиду код функции.
Спустя 2 минуты, 2 секунды (27.03.2012 - 15:27) killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 27.03.2012 - 14:25) |
я имел ввиду код функции. |
Спустя 1 минута, 8 секунд (27.03.2012 - 15:28) olya-kowka написал(а):
Игорь_Vasinsky, получается формируешь динамически капчу, потом приходит тебе POST и ты его на достоверность не проверишь? Типа раз пришел, значит, не робот?
Где в этом случае хранить значение, с которым сверяться и как его проверить..?
Где в этом случае хранить значение, с которым сверяться и как его проверить..?

Спустя 2 минуты, 36 секунд (27.03.2012 - 15:31) Игорь_Vasinsky написал(а):
Цитата |
А это что? |



Цитата |
Игорь_Vasinsky, получается формируешь динамически капчу, потом приходит тебе POST и ты его на достоверность не проверишь? Типа раз пришел, значит, не робот? Где в этом случае хранить значение, с которым сверяться и как его проверить..? |
как это.. нафиг тогда она вообще нужна, это попытка скрыть от хилого спам бота картинку с кодом в доме документа.
Все остальное по правилам военного боя.
Спустя 3 минуты, 57 секунд (27.03.2012 - 15:35) olya-kowka написал(а):
Игорь_Vasinsky, ну вот так и есть .... что через js никак....
Спустя 1 минута, 10 секунд (27.03.2012 - 15:36) killer8080 написал(а):
olya-kowka
вообще в коде капчи не мешало бы проверять заголовки запроса. Не все боты подделывают юзер агент, часть отсеется.
И урл капчи добавить в robots.txt, чтоб поисковики его не дергали.
вообще в коде капчи не мешало бы проверять заголовки запроса. Не все боты подделывают юзер агент, часть отсеется.

И урл капчи добавить в robots.txt, чтоб поисковики его не дергали.
Спустя 6 минут, 11 секунд (27.03.2012 - 15:42) olya-kowka написал(а):
killer8080, понятно.
Цитата (killer8080 @ 27.03.2012 - 12:36) |
вообще в коде капчи не мешало бы проверять заголовки запроса. Не все боты подделывают юзер агент, часть отсеется. |
Какие именно проверять для надежности?
Спустя 5 минут, 33 секунды (27.03.2012 - 15:48) killer8080 написал(а):
ну так на вскидку.
Спустя 5 минут, 16 секунд killer8080 написал(а):
Еще практически все браузеры шлют заголовок ACCEPT-LANGUAGE (насчет мобильных девайсов не уверен), и принимают gzip ACCEPT-ENCODING
if(!isset($_SERVER['HTTP_USER_AGENT']) || !preg_match('#(msie)|(opera)|(webkit)|(mozilla)#i', $_SERVER['HTTP_USER_AGENT']))
die();
Спустя 5 минут, 16 секунд killer8080 написал(а):
Еще практически все браузеры шлют заголовок ACCEPT-LANGUAGE (насчет мобильных девайсов не уверен), и принимают gzip ACCEPT-ENCODING
Спустя 28 минут, 32 секунды (27.03.2012 - 16:16) I++ написал(а):
А не проще брать рекаптчу которая генерится у гугла? И не проверять ничего и забыть?
Спустя 4 минуты, 30 секунд (27.03.2012 - 16:21) killer8080 написал(а):
Цитата (I++ @ 27.03.2012 - 15:16) |
А не проще брать рекаптчу которая генерится у гугла? И не проверять ничего и забыть? |
Не вижу ничего хорошего в зависимости сайта от стороннего ресурса.
Спустя 52 минуты, 40 секунд (27.03.2012 - 17:13) I++ написал(а):
А я не вижу смысла, так не делать на мелких проектах.
Да и сторонний ресурс этот не от дяди васи.
Да и сторонний ресурс этот не от дяди васи.
Спустя 13 минут, 41 секунда (27.03.2012 - 17:27) VELIK505 написал(а):
Цитата (olya-kowka @ 27.03.2012 - 09:55) |
FatCat, вот нынешняя атака очень массовая. И количество адресов, с которых идет атака, очень большое.... |
iptables? ddos deflate? Не?
Спустя 15 часов, 50 минут, 26 секунд (28.03.2012 - 09:18) killer8080 написал(а):
Цитата (I++ @ 27.03.2012 - 16:13) |
А я не вижу смысла, так не делать на мелких проектах. Да и сторонний ресурс этот не от дяди васи. |
Сторонний он и есть сторонний, не важно от какого дяди. Если в нем вдруг найдется уязвимость, под удар попадают массово, куча сайтов. Кто может дать 100% гарантию, что такого быть не может? Бренд, это всего лишь бренд, дырки бывают и на крупных проектах. Я считаю, что сторонние сервисы оправданы, там где они реально экономят ресурс, например для размещения видео, или потоковых трансляций. Капча не такой уж ресурсоемкий сервис. А главное, какие преимущества гуглевая рекапча имеет перед обычной капчей? Кроме экономии на GD? Против "китайцев" она так же беззащитна. Хакеру нет особого смысла тратить время, затачивать распознавание картинки под мелкий единичный сайт, а вот под популярную рекапчу есть! Если рекапчу задидосят, то автоматом страдает функционал вашего сайта. Так какой в ней смысл?
Но это конечно мое личное мнение, я никому его не навязываю

Спустя 5 часов, 57 минут, 27 секунд (28.03.2012 - 15:15) I++ написал(а):
killer8080
Отчасти согласен, но если требуется сделать по фасту, для мелкого проекта. (меньше 10к уников в сутки.), то какой смысл?
Конечно можно создать собственную каптчу, но это время, которое иногда очень ценно. Зато можно потом внедрять в другие проекты.
Отчасти согласен, но если требуется сделать по фасту, для мелкого проекта. (меньше 10к уников в сутки.), то какой смысл?
Конечно можно создать собственную каптчу, но это время, которое иногда очень ценно. Зато можно потом внедрять в другие проекты.
Спустя 2 дня, 5 часов, 42 минуты, 59 секунд (30.03.2012 - 20:58) testr написал(а):
Visman, лучше без жонглирований яваскриптом, не забывай что могут дать атаку напрямую на скрипт, который генерирует проверочное изображение и никакие фокусы здесь уже не помогут.
olya-kowka, присмотрись к reсaptcha, неплохая вещь.
Для начала зарегистрируй свой сайт здесь http://www.google.com/recaptcha
затем переходи к изучению доков https://developers.google.com/recaptcha/intro
Тебе будет выдан публичный и приватный ключ, приватный должен юзаться только в скриптах, никому его не говори.
Вот например встраиваешь капчу на страницу даже без php
your_public_key - здесь подставляешь публичный ключ
так же можно указать тему (https://developers.google.com/recaptcha/docs/customization) для этого в начале пиши например
ну и на стороне пхп проверяется элементарно (https://developers.google.com/recaptcha/docs/php)
отправлять запросик гуглу это ведь менее затратно чем на сервере генерировать изображение :)
olya-kowka, присмотрись к reсaptcha, неплохая вещь.
Для начала зарегистрируй свой сайт здесь http://www.google.com/recaptcha
затем переходи к изучению доков https://developers.google.com/recaptcha/intro
Тебе будет выдан публичный и приватный ключ, приватный должен юзаться только в скриптах, никому его не говори.
Вот например встраиваешь капчу на страницу даже без php
<script type="text/javascript"
src="http://www.google.com/recaptcha/api/challenge?k=your_public_key">
</script>
<noscript>
<iframe src="http://www.google.com/recaptcha/api/noscript?k=your_public_key"
height="300" width="500" frameborder="0"></iframe><br>
<textarea name="recaptcha_challenge_field" rows="3" cols="40">
</textarea>
<input type="hidden" name="recaptcha_response_field"
value="manual_challenge">
</noscript>
your_public_key - здесь подставляешь публичный ключ
так же можно указать тему (https://developers.google.com/recaptcha/docs/customization) для этого в начале пиши например
<script type="text/javascript">
var RecaptchaOptions = {
theme : 'white'
};
</script>
ну и на стороне пхп проверяется элементарно (https://developers.google.com/recaptcha/docs/php)
<?php
require_once('recaptchalib.php');
$privatekey = "your_private_key";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
}
?>
отправлять запросик гуглу это ведь менее затратно чем на сервере генерировать изображение :)
Спустя 12 часов, 12 минут, 7 секунд (31.03.2012 - 09:10) Visman написал(а):
Цитата (testr @ 31.03.2012 - 01:58) |
Visman, лучше без жонглирований яваскриптом, не забывай что могут дать атаку напрямую на скрипт, который генерирует проверочное изображение и никакие фокусы здесь уже не помогут. |
Вообще-то я про изображения не говорил. Если кодировать форму js, то ни какие капчи вообще не нужны!
З.Ы. Вот у меня ни каких капч на форуме нет, боты там ползают постоянно, а оставить сообщение не могут

_____________
Столько дел...Не успеваю на все забить!!