Вы не зашли.
Главная » PHP » Скажем нет капче!
#1. TLENS Off (14)
Moderator
2011.07.11 02:02
Немного обдумывал как бротся со спамерами.
То сейчас многих раздражает капча, и меня в том числе.
Мож я чего то упустил?
Вообщем есть идея написать скрипт который будет полноценно наблюдать за каждым.
Но есть пару вопросов кто нить уже думал об этом, и реально ли такое?
#2. DarkDaNTe Off (11)
Участник
2011.07.11 15:03
реально всё, но, думаю, малоэффективно будет)
#3. Gemorroj Off (107)
Administrator
2011.07.11 15:03
ну можно упростить пользователям жизнь используя текстовую капчу хотябы. вставляя рандомно всякий шлак, затрудняющий распознавание для ботов.
например, span теги, заменять символы на unicode последовательности. такой подход используется на govnowap.ru и wapinet.ru. помогает от ботов в 90% случаев.
#4. DarkDaNTe Off (11)
Участник
2011.07.11 18:06
Gemorroj, только заметил, никогда не приходило в голову. Возьму к сведению, спасибоsmile
#5. DarkRiDDeR Off (4)
Участник
2011.07.12 07:07
Ну капча, конечно, достаёт, но графическая - это лучший способ защиты на данный момент, хоть что с этим делай. Но и её можно обойти(ещё зависит от её замудрённости).
#6. TLENS Off (14)
Moderator
2011.07.12 16:04
На счет реги еще не придумал.
Но вот насчет например привата думаю вести журнал каждого юзера и в случае подозрений блочить его.
Подозрениями могут быть много факторов например: Интервал запросов к сайту, большой процент схожести сообщений, определять одних и тех же юзеров на разных аках, и тому подобное.
#7. DarkDaNTe Off (11)
Участник
2011.07.12 16:04
такое ведь, по моему, реализовано в Google Adsense.
Добавлено спустя   2 минуты  11 секунд:
и вообще в продуктах гугла)
#8. TLENS Off (14)
Moderator
2011.07.12 18:06
Как можно обработать процент схожести сообщений?
У меня идея такова подсчет количества слов, в случае большого процента совпадения разбить через
preg_split('/[,\.\!\?]{0,3}\s/U');
И обработать каждый элемент массива на процент совместимости, покаместь со всех идей это самый оптимальный вариант.
Или есть Альтернатива по эффективней?
Отредактировано TLENS (2011.07.12 18:06)
#9. Gemorroj Off (107)
Administrator
2011.07.12 18:06
DarkDaNTe, такое много где реализовано) даже тут в гостевой wink
TLENS, levenshtein, similar_text
#10. TLENS Off (14)
Moderator
2011.07.12 18:06
Gemorroj
СПС
#11. tipsun Off (19)
Moderator
2011.09.20 09:09
Я вот подумал и надумал вот что. Видел один демотиватор, как там типа человек может читать слова, даже если буквы кроме первой и последней (вроде или 2х первых и последних) в нем разбросаны/переставлены/не на своих местах. Думаю сделать такую каптчу. Давать слова разбросанные, а вводили чтоб нормальные или числа (чтеыре=4).
Пока не знаю как реализовать, но думаю стоит попробовать. smile
- - - -
Ну может быть сначала нормальное слово в мд5 заширить, потом в input hidden. И после перемещать исходное и показать пользователю.
Вот эта тема: habrahabr.ru/blogs/programming/122163/
а там до меня уже додумались big_smile
Отредактировано tipsun (2011.09.20 10:10)
#12. Gemorroj Off (107)
Administrator
2011.09.20 10:10
интересная идея.
вот только md5 хэш нельзя светить, иначе просто переставляя буквы и сверяя хэш, можно получить правильное слово.
тут нужен просто массив соответствий array('чтеыре' => 'четыре');
#13. tipsun Off (19)
Moderator
2011.09.20 11:11
Цифры будет легко разгадать. Там всего то: 1, 4-20, 30-90-1000 ну одно слово чтоб было.
#14. tipsun Off (19)
Moderator
2011.09.20 11:11
С телефона писал, может че неправильно. Уже забыл код smile
Код:
span style="color: #0000BB"><?php$random = 'vosem';$len = strlen($random);$toMix = substr($random, 1, $len-2);$mixed = str_shuffle($toMix);echo $random{0}.$mixed.$random{$len-1};?>
Отредактировано tipsun (2011.09.20 12:12)
#15. Gemorroj Off (107)
Administrator
2011.09.20 12:12
нет, так не получится с мультбайтовой кодировкой.
#16. tipsun Off (19)
Moderator
2011.09.20 12:12
Ну я вспомнил сейчас smile
Там mb_substr(), mb_strlen(). А вот суффле нет sad
Добавлено спустя   1 минуту  56 секунд:
С php.net
Код:
span style="color: #0000BB"><?phpfunction unicode_shuffle($string, $chars, $format = 'UTF-8'){ for($i=0; $i<$chars; $i++) $rands[$i] = rand(0, mb_strlen($string, $format)); $s = NULL; foreach($rands as $r) $s.= mb_substr($string, $r, 1, $format); return $s;}?>
#17. tipsun Off (19)
Moderator
2011.09.20 20:08
Чет у меня пока нет хороших мыслей как реализовать: первую и последнюю не трогая перемещать буквы.

Код:
preg_split('//u', 'слово') дает [0]=null, [1]='c' ... [last]=null
 
unset($array[0], $array[последний ключ/знач])
можно...
Отредактировано tipsun (2011.09.20 20:08)
#18. tipsun Off (19)
Moderator
2011.09.20 21:09
Код:
span style="color: #0000BB"><?php$captchaLib = array('один' => 1,'четыре' => 4,'пять' => 5,'шесть' => 6,'семь' => 7,'восемь' => 8,'девять' => 9,'десять' => 10,'одиннадцать' => 11,'двенадцать' => 12,'тринадцать' => 13,'четырнадцать' => 14,'пятнадцать' => 15,'шестнадцать' => 16,'семнадцать' => 17,'восемнадцать' => 18,'девятнадцать' => 19,'двадцать' => 20,'тридцать' => 30,'сорок' => 40,'пятьдесят' => 50,'шестьдесят' => 60,'семьдесят' => 70,'восемьдесят' => 80,'девяносто' => 90,'двести' => 200,'тристо' => 300,'четыресто' => 400,'пятьсот' => 500,'шестьсот' => 600,'семьсот' => 700,'восемьсот' => 800,'девятьсот' => 900,'тысяча' => 1000);function captcha($lib=0) { if(!is_array($lib)) return false; $word = array_rand($lib); preg_match_all('/.{1}/u', $word, $letters); $letters = $letters[0]; $count = sizeof($letters); define('LLN', $count-1); define('FL', $letters[0]); define('LL', $letters[LLN]); unset($letters[0], $letters[LLN]); shuffle($letters); return FL.implode($letters).LL; }echo captcha($captchaLib);?>
Отредактировано tipsun (2011.09.20 22:10)
#19. tipsun Off (19)
Moderator
2011.09.20 22:10
Я уже знаю что ответят: "Сделай класс!" big_smile
Да и так все класс big_smile
Ну а по делу, да надо бы.
Сразу там же проверку сделать.
- - - -
Можно было бы просто массив со словами >3 букв.
Код:
span style="color: #0000BB"><?php//Проверкаif(in_array($_GET['captcha'], $captchaLib)) { echo 'All right!'; }//Бред, не смотрите =)?>
Отредактировано tipsun (2011.09.21 19:07)
#20. Gemorroj Off (107)
Administrator
2011.09.20 22:10
ну если знаешь, то почему не делаешь?)
#21. tipsun Off (19)
Moderator
2011.09.20 23:11
Сделаю, попозже. Не все сразу. smile
Отредактировано tipsun (2011.09.20 23:11)
#22. tipsun Off (19)
Moderator
2011.09.21 18:06
Не получается. Не знаю как именно там так же красиво все прописать.
- - - -
Как я сейчас понял сессию для гостя все равно придется начать sad
Код:
span style="color: #0000BB"><?phpclass captcha { //Словарь// private $lib = array('ручка', 'тетрадь'); private $word = null; public $code = null; public function __construct() { $this->word = $this->lib[array_rand($this->lib)]; preg_match_all('/.{1}/u', $this->word, $letters); $letters = $letters[0]; $count = sizeof($letters)-1; $_FL = $letters[0]; $_LL = $letters[$count]; unset($letters[0], $letters[$count]); shuffle($letters); $this->code = $_FL.implode($letters).$_LL; if($this->word == $this->code) self::__construct(); } public function check() { } }$captcha = new captcha;echo $captcha->code;?>
Отредактировано tipsun (2011.09.21 19:07)
#23. tipsun Off (19)
Moderator
2011.09.21 22:10
Нормально или как всегда г.+?
Отредактировано tipsun (2011.09.21 23:11)
#24. Gemorroj Off (107)
Administrator
2011.09.21 23:11
используй сеттеры и геттеры.
т.е. не echo $captcha->code; а, echo $captcha->getCode(); в методе getCode просто return $this->code; а переменные все приватными или защищенными сделай.
#25. tipsun Off (19)
Moderator
2011.09.21 23:11
Ок, спс.
#26. TLENS Off (14)
Moderator
2011.09.22 12:12
Чушь полная гг.
Забей в поиск "чтеыре" и получишь четыре. Это только один из ста вариантов взлома такой капчи разве что на картинку кидать и толку.
Отредактировано TLENS (2011.09.22 12:12)
#27. tipsun Off (19)
Moderator
2011.09.22 21:09
А как тогда? smile
Неужеди все способы г.+?
С картинкой тогда делать?
- - - -
Если г.+ тогда можно просто картинку с цифрами. Че мудрить тогда.
Отредактировано tipsun (2011.09.22 21:09)
#28. tipsun Off (19)
Moderator
2011.09.27 22:10
Норм? o_O
Код:
span style="color: #0000BB"><?php//////////function captcha() { $code = rand(1000,9999); $image = imageCreateTrueColor(40, 20); imageFill($image, 39, 19, imageColorAllocate($image, 128, 128, 128)); imageString($image, 5, 2, 2, $code, imageColorAllocate($image, 0, 0, 0)); imagejpeg($image, 'captcha.jpg', 100); imageDestroy($image); return $code; }//////////session_start();$_SESSION['_CAPTCHA_'] = captcha();?>
Отредактировано tipsun (2011.09.27 23:11)
#29. WapStyle Off (3)
Участник
2011.09.28 00:12
На те капчу...только числа с мусором...
Код:
$pkod = str_split(intval($_SESSION['code']));
$img = imagecreate(42, 18);
$fon = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $fon);
$color1 = imagecolorallocate($img, mt_rand(0, 204), mt_rand(0, 204), mt_rand(0,204));
$color2 = imagecolorallocate($img, mt_rand(0, 204), mt_rand(0, 204), mt_rand(0,204));
$color3 = imagecolorallocate($img, mt_rand(0, 204), mt_rand(0, 204), mt_rand(0,204));
$color4 = imagecolorallocate($img, mt_rand(0, 204), mt_rand(0, 204), mt_rand(0,204));
 
ImageString($img, 5, mt_rand(2, 3), mt_rand(0, 3), $pkod[0], $color1);
ImageString($img, 5, mt_rand(11, 12), mt_rand(0, 3), $pkod[1], $color2);
ImageString($img, 5, mt_rand(20, 21), mt_rand(0, 3), $pkod[2], $color2);
ImageString($img, 5, mt_rand(29, 30), mt_rand(0, 3), $pkod[3], $color3);
 
for($i = 0; $i < 5; $i++){
$temp_color = imagecolorallocate($img, mt_rand(155, 204), mt_rand(155, 204),mt_rand(155, 204));
imageline($img, mt_rand(0, 42), mt_rand(0, 18), mt_rand(0, 42), mt_rand(0, 18),$temp_color);
}
for($i = 0; $i < 50; $i++){
$temp_color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($img, mt_rand(0, 42), mt_rand(0, 18), $temp_color);
}
 
Header('Content-type: image/gif');
ImageGIF($img);
ImageDestroy($img);
#30. tipsun Off (19)
Moderator
2011.09.28 16:04
Я писал разноцветную, но "нахера" - потом спросил себя?
Вот идея у тебя хорошая, с сессии брать число.

Вот, вроде работает. http://wapinet.ru/forum/download.php?aid=815
Как отдельный файл, просто указать
Код:
<img src="captcha.php" alt="captcha" />
Код:
span style="color: #0000BB"><?phpsession_start();$image = imageCreateTrueColor(40, 20);imageFill($image, 39, 19, imageColorAllocate($image, 128, 128, 128));imageString($image, 5, 2, 2, (int)$_SESSION['_CAPTCHA_'], imageColorAllocate($image, 0, 0, 0));header('Content-Type: image/jpeg;');imagejpeg($image, null, 100);imageDestroy($image);?>
Вложения
captcha.jpg 1kb {40x20} [загрузок: 1034]
Отредактировано tipsun (2011.09.28 16:04)
#31. TLENS Off (14)
Moderator
2011.09.28 16:04
видимо не скажем такого))
#32. tipsun Off (19)
Moderator
2011.09.28 17:05
Я буду рад smile
Особенно если получилось лучше чем в ZF. Отмечать буду big_smile
Отредактировано tipsun (2011.09.28 17:05)
#33. Gemorroj Off (107)
Administrator
2011.09.28 18:06
а смысл в этик самописных капчах? ее взломать достаточно просто. почему бы не взять готовые проверенные решения?
#34. tipsun Off (19)
Moderator
2011.09.28 18:06
Ну это все равно что пойти в банк спермы для своей жены smile
#35. TLENS Off (14)
Moderator
2011.09.29 06:06
tipsun
Да нет ты ошибаешься.
#36. tipsun Off (19)
Moderator
2011.09.29 20:08
Да если так взять, то че париться: поставил DCMS, JohnCMS, Motor, Rotor и все, но хочется самому написать что-то smile
#37. Gemorroj Off (107)
Administrator
2011.09.29 20:08
tipsun, ну это разные вещи все-таки, имхо)
только если изначально стояла цель написать именно компонент для капчи. если же пишется, скажем, блог или форум, то изобретать таки велосипеды, как капча, имхо, смысла нет.
#38. tipsun Off (19)
Moderator
2011.09.30 22:10
Ну, вам видней. smile
#39. Gemorroj Off (107)
Administrator
2011.09.30 23:11
вам..?
#40. wexc Off (2)
Участник
2011.09.30 23:11
видал капчу на буржуйском сайте там три фигурки их надо мышкой выставить правильно после чего можно писать сообщения. вот это думаю супер капча
Отредактировано wexc (2011.09.30 23:11)
#41. tipsun Off (19)
Moderator
2011.10.01 08:08
Gemorroj, тебе и TLENSy
Добавлено спустя   2 минуты  54 секунды:
wexc, ну это наверно JS. На мобильном не прокатит, наверно.
Отредактировано tipsun (2011.10.01 15:03)
#42. Gemorroj Off (107)
Administrator
2011.10.01 10:10
это вообще, flash, наверное
#43. wexc Off (2)
Участник
2011.10.01 19:07
не не флеш что то другое
#44. Gemorroj Off (107)
Administrator
2011.10.01 19:07
ссылку?
#45. wexc Off (2)
Участник
2011.10.02 01:01
да я уже не помню но точно знаю если бы была флешка то я бы ее выдернул на память
#46. tipsun Off (19)
Moderator
2011.11.20 09:09
Вот еще пришла в голову мысль.
Делать каптчу либо на русском, либо на английском.
В этой captcha заменить похожие друг на друга буквы (шрифт подобрать такой, чтоб различий вообще не было видно).
Ну по идее бот должен полностью скопировать и вставлять текст. А человек должен будет прописать.
- - - -
ХАВpx
- - - -
Можно даже не указывать на каком языке ввести, просто принимать и на том и на другом языке в чистом виде (исключая другой).
Что насчет этого думаете?
Отредактировано tipsun (2011.11.20 09:09)
#47. Gemorroj Off (107)
Administrator
2011.11.20 10:10
ммм.. текстовая капча? человек тоже может ее скопировать. картинка? о каком копировании ботом тогда идет речь..?
#48. tipsun Off (19)
Moderator
2011.11.20 13:01
Нет, текстовая.
А вроде есть ведь свойство у input чтоб его нельзя было тронуть?
Сейчас напишу о чем я.
Поддержка всеми браузерами и разметками.
http://htmlbook.ru/html/input/disabled

Для моб.:
Просто, как текст.
Для компов:
Код:
<input type="text" value="pрАH" disabled="disabled" />
Можно сделать типа чтоб пользователю было понятно на каком языке вводить добавить пару "явных" букв с русского или английского языка:

русс: pрАHэг
англ: pрАHqr
Отредактировано tipsun (2011.11.20 14:02)
#49. Gemorroj Off (107)
Administrator
2011.11.20 14:02
ну, может-быть, может быть. правда опять-же. это никак не спасет от специально написанных под такой алгоритм роботов.
#50. tipsun Off (19)
Moderator
2011.11.20 14:02
sad
А какой алгоритм может быть универсален, изображение?
#51. Gemorroj Off (107)
Administrator
2011.11.20 14:02
типо того. что сложно распарсить роботу. картинки, видео, флэш, java апплеты.. хз)
#52. tipsun Off (19)
Moderator
2011.11.20 14:02
Понятно.
#53. tipsun Off (19)
Moderator
2011.11.22 23:11
Очередная говноидея...

http://wapinet.ru/forum/download.php?aid=904
http://wapinet.ru/forum/download.php?aid=905

Код:
span style="color: #0000BB"><?php//session_start();define('X', rand(1000, 9999));define('Y', rand(1000, 9999));$quest = rand(0, 1) ? 'min' : 'max';define('CAPTCHA', $quest(X, Y));//$_SESSION['CAPTCHA'] = CAPTCHA;define('STR1', 'Write ' . $quest);define('STR2', X . ' ' . Y);$image = imageCreateTrueColor(100, 40);imageFill($image, 0, 0, imageColorallocate($image, 100, 100, 100));imageString($image, 5, 10, 3, STR1, imageColorallocate($image, 0, 0, 0));imageString($image, 5, 10, 20, STR2, imageColorallocate($image, 0, 0, 0));header('Content-Type: image/jpeg;');imagejpeg($image, null, 100);?>
Вложения
quest_1.jpg 4kb {100x40} [загрузок: 1045]
quest_2.jpg 4kb {100x40} [загрузок: 1048]
Отредактировано tipsun (2011.11.22 23:11)
#54. Gemorroj Off (107)
Administrator
2011.11.23 11:11
не, обходится элементарно.
а в текущей реализации даже простым трафаретом. без искревлений букв рандомных даже рассматривать, имхо, не стоит.
Добавлено спустя   2 минуты  1 секунду:
вот http://wapinet.ru/forum/include/captcha/captcha.php - по-моему отличная реализация.
#55. tipsun Off (19)
Moderator
2011.11.23 11:11
Вот еще текстовая интересная [» captcha]
http://wapinet.ru/forum/download.php?aid=906
Вложения
symb.JPG 14kb {488x208} [загрузок: 1078]
Отредактировано tipsun (2011.11.23 11:11)
#56. tipsun Off (19)
Moderator
2012.02.20 12:12
А вот еще читал про анимированную каптчу. Как насчет gif?
Её тоже легко разложить на кадры итд?
- - - -
Или, вот еще вспомнил, задачка из телеканала:
Сколько треугольников нарисованно?
Сколько линий?
Сколько точек пересечения?
http://wapinet.ru/forum/download.php?aid=1000
А вообще конечно эти хакеры гении.
Какие хочешь способы взлома, распознавания они придумывают.
Еще умудряются вычислять градусы искажения. Вообще...
И 3D каптчу там тоже было написано можно сломать вычислениями.
Вложения
test.jpg 2kb {100x50} [загрузок: 1018]
Отредактировано tipsun (2012.02.20 12:12)
#57. tipsun Off (19)
Moderator
2012.02.20 12:12
Например собрать 4-5 искаженных изображений в gif. Задать пользователю: введи число с X кадра.
Правда мобильнику gif не по зубам. smile
Отредактировано tipsun (2012.02.20 12:12)
#58. Gemorroj Off (107)
Administrator
2012.02.20 12:12
tipsun, вот только не нужно хацкерам жопу лизать. 99% т.н. хацкеров малолетние дибилы начитавшиеся хацкера.
взлом приведенной тобой капчи произведет любой хороший программист.
#59. tipsun Off (19)
Moderator
2012.02.20 12:12
Понятно.
Страниц: 14 5 6 Все
Главная
WEB
PunBB Mod v0.6.2
0.044 s