TLENS » 2011.07.11 02:22

Немного обдумывал как бротся со спамерами.
То сейчас многих раздражает капча, и меня в том числе.
Мож я чего то упустил?
Вообщем есть идея написать скрипт который будет полноценно наблюдать за каждым.
Но есть пару вопросов кто нить уже думал об этом, и реально ли такое?

DarkDaNTe » 2011.07.11 15:20

реально всё, но, думаю, малоэффективно будет)

Gemorroj » 2011.07.11 15:56

ну можно упростить пользователям жизнь используя текстовую капчу хотябы. вставляя рандомно всякий шлак, затрудняющий распознавание для ботов.
например, span теги, заменять символы на unicode последовательности. такой подход используется на govnowap.ru и wapinet.ru. помогает от ботов в 90% случаев.

DarkDaNTe » 2011.07.11 18:27

Gemorroj, только заметил, никогда не приходило в голову. Возьму к сведению, спасибо:)

DarkRiDDeR » 2011.07.12 07:20

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

TLENS » 2011.07.12 16:06

На счет реги еще не придумал.
Но вот насчет например привата думаю вести журнал каждого юзера и в случае подозрений блочить его.
Подозрениями могут быть много факторов например: Интервал запросов к сайту, большой процент схожести сообщений, определять одних и тех же юзеров на разных аках, и тому подобное.

DarkDaNTe » 2011.07.12 16:54

такое ведь, по моему, реализовано в Google Adsense.
Добавлено спустя   2 минуты  11 секунд:
и вообще в продуктах гугла)

TLENS » 2011.07.12 18:05

Как можно обработать процент схожести сообщений?
У меня идея такова подсчет количества слов, в случае большого процента совпадения разбить через
preg_split('/[,\.\!\?]{0,3}\s/U');
И обработать каждый элемент массива на процент совместимости, покаместь со всех идей это самый оптимальный вариант.
Или есть Альтернатива по эффективней?

Gemorroj » 2011.07.12 18:16

DarkDaNTe, такое много где реализовано) даже тут в гостевой ;)
TLENS, levenshtein, similar_text

TLENS » 2011.07.12 18:17

Gemorroj
СПС

tipsun » 2011.09.20 09:50

Я вот подумал и надумал вот что. Видел один демотиватор, как там типа человек может читать слова, даже если буквы кроме первой и последней (вроде или 2х первых и последних) в нем разбросаны/переставлены/не на своих местах. Думаю сделать такую каптчу. Давать слова разбросанные, а вводили чтоб нормальные или числа (чтеыре=4).
Пока не знаю как реализовать, но думаю стоит попробовать. :)
- - - -
Ну может быть сначала нормальное слово в мд5 заширить, потом в input hidden. И после перемещать исходное и показать пользователю.
Вот эта тема: habrahabr.ru/blogs/programming/122163/
а там до меня уже додумались :D

Gemorroj » 2011.09.20 10:30

интересная идея.
вот только md5 хэш нельзя светить, иначе просто переставляя буквы и сверяя хэш, можно получить правильное слово.
тут нужен просто массив соответствий array('чтеыре' => 'четыре');

tipsun » 2011.09.20 11:01

Цифры будет легко разгадать. Там всего то: 1, 4-20, 30-90-1000 ну одно слово чтоб было.

tipsun » 2011.09.20 11:36

С телефона писал, может че неправильно. Уже забыл код :)

Код:

1
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};?>
Gemorroj » 2011.09.20 12:27

нет, так не получится с мультбайтовой кодировкой.

tipsun » 2011.09.20 12:31

Ну я вспомнил сейчас =)
Там mb_substr(), mb_strlen(). А вот суффле нет =(
Добавлено спустя   1 минуту  56 секунд:
С php.net

Код:

1
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;}?>
tipsun » 2011.09.20 20:45

Чет у меня пока нет хороших мыслей как реализовать: первую и последнюю не трогая перемещать буквы.

Код:

1
2
3
4
preg_split('//u', 'слово') дает [0]=null, [1]='c' ... [last]=null
 
unset($array[0], $array[последний ключ/знач])
можно...
tipsun » 2011.09.20 21:36

Код:

1
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:05

Я уже знаю что ответят: "Сделай класс!" :D
Да и так все класс :D
Ну а по делу, да надо бы.
Сразу там же проверку сделать.
- - - -
Можно было бы просто массив со словами >3 букв.

Код:

1
span style="color: #0000BB"><?php//Проверкаif(in_array($_GET['captcha'], $captchaLib)) { echo 'All right!'; }//Бред, не смотрите =)?>
Gemorroj » 2011.09.20 22:38

ну если знаешь, то почему не делаешь?)

tipsun » 2011.09.20 23:09

Сделаю, попозже. Не все сразу. :)

tipsun » 2011.09.21 18:38

Не получается. Не знаю как именно там так же красиво все прописать.
- - - -
Как я сейчас понял сессию для гостя все равно придется начать :(

Код:

1
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 22:56

Нормально или как всегда г.+?

Gemorroj » 2011.09.21 23:07

используй сеттеры и геттеры.
т.е. не echo $captcha->code; а, echo $captcha->getCode(); в методе getCode просто return $this->code; а переменные все приватными или защищенными сделай.

tipsun » 2011.09.21 23:12

Ок, спс.

TLENS » 2011.09.22 12:51

Чушь полная гг.
Забей в поиск "чтеыре" и получишь четыре. Это только один из ста вариантов взлома такой капчи разве что на картинку кидать и толку.

tipsun » 2011.09.22 21:13

А как тогда? :)
Неужеди все способы г.+?
С картинкой тогда делать?
- - - -
Если г.+ тогда можно просто картинку с цифрами. Че мудрить тогда.

tipsun » 2011.09.27 22:35

Норм? o_O

Код:

1
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();?>
WapStyle » 2011.09.28 00:38

На те капчу...только числа с мусором...

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$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);
tipsun » 2011.09.28 16:16

Я писал разноцветную, но "нахера" - потом спросил себя?
Вот идея у тебя хорошая, с сессии брать число.

Вот, вроде работает. http://wapinet.ru/forum/download.php?aid=815
Как отдельный файл, просто указать

Код:

1
<img src="captcha.php" alt="captcha" />

Код:

1
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);?>
TLENS » 2011.09.28 16:44

видимо не скажем такого))

tipsun » 2011.09.28 17:47

Я буду рад =)
Особенно если получилось лучше чем в ZF. Отмечать буду :D

Gemorroj » 2011.09.28 18:02

а смысл в этик самописных капчах? ее взломать достаточно просто. почему бы не взять готовые проверенные решения?

tipsun » 2011.09.28 18:29

Ну это все равно что пойти в банк спермы для своей жены =)

TLENS » 2011.09.29 06:33

tipsun
Да нет ты ошибаешься.

tipsun » 2011.09.29 20:37

Да если так взять, то че париться: поставил DCMS, JohnCMS, Motor, Rotor и все, но хочется самому написать что-то =)

Gemorroj » 2011.09.29 20:44

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

tipsun » 2011.09.30 22:59

Ну, вам видней. :)

Gemorroj » 2011.09.30 23:04

вам..?

wexc » 2011.09.30 23:58

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

tipsun » 2011.10.01 08:27

Gemorroj, тебе и TLENSy
Добавлено спустя   2 минуты  54 секунды:
wexc, ну это наверно JS. На мобильном не прокатит, наверно.

Gemorroj » 2011.10.01 10:35

это вообще, flash, наверное

wexc » 2011.10.01 19:00

не не флеш что то другое

Gemorroj » 2011.10.01 19:14

ссылку?

wexc » 2011.10.02 01:53

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

tipsun » 2011.11.20 09:17

Вот еще пришла в голову мысль.
Делать каптчу либо на русском, либо на английском.
В этой captcha заменить похожие друг на друга буквы (шрифт подобрать такой, чтоб различий вообще не было видно).
Ну по идее бот должен полностью скопировать и вставлять текст. А человек должен будет прописать.
- - - -
ХАВpx
- - - -
Можно даже не указывать на каком языке ввести, просто принимать и на том и на другом языке в чистом виде (исключая другой).
Что насчет этого думаете?

Gemorroj » 2011.11.20 10:08

ммм.. текстовая капча? человек тоже может ее скопировать. картинка? о каком копировании ботом тогда идет речь..?

tipsun » 2011.11.20 13:54

Нет, текстовая.
А вроде есть ведь свойство у input чтоб его нельзя было тронуть?
Сейчас напишу о чем я.
Поддержка всеми браузерами и разметками.
http://htmlbook.ru/html/input/disabled

Для моб.:
Просто, как текст.
Для компов:

Код:

1
<input type="text" value="pрАH" disabled="disabled" />

Можно сделать типа чтоб пользователю было понятно на каком языке вводить добавить пару "явных" букв с русского или английского языка:

русс: pрАHэг
англ: pрАHqr

Gemorroj » 2011.11.20 14:13

ну, может-быть, может быть. правда опять-же. это никак не спасет от специально написанных под такой алгоритм роботов.

tipsun » 2011.11.20 14:14

:(
А какой алгоритм может быть универсален, изображение?

Gemorroj » 2011.11.20 14:19

типо того. что сложно распарсить роботу. картинки, видео, флэш, java апплеты.. хз)

tipsun » 2011.11.20 14:21

Понятно.

tipsun » 2011.11.22 23:36

Очередная говноидея...

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

Код:

1
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);?>
Gemorroj » 2011.11.23 11:26

не, обходится элементарно.
а в текущей реализации даже простым трафаретом. без искревлений букв рандомных даже рассматривать, имхо, не стоит.
Добавлено спустя   2 минуты  1 секунду:
вот http://wapinet.ru/forum/include/captcha/captcha.php - по-моему отличная реализация.

tipsun » 2011.11.23 11:53

Вот еще текстовая интересная [» captcha]
http://wapinet.ru/forum/download.php?aid=906

tipsun » 2012.02.20 12:13

А вот еще читал про анимированную каптчу. Как насчет gif?
Её тоже легко разложить на кадры итд?
- - - -
Или, вот еще вспомнил, задачка из телеканала:
Сколько треугольников нарисованно?
Сколько линий?
Сколько точек пересечения?
http://wapinet.ru/forum/download.php?aid=1000
А вообще конечно эти хакеры гении.
Какие хочешь способы взлома, распознавания они придумывают.
Еще умудряются вычислять градусы искажения. Вообще...
И 3D каптчу там тоже было написано можно сломать вычислениями.

tipsun » 2012.02.20 12:28

Например собрать 4-5 искаженных изображений в gif. Задать пользователю: введи число с X кадра.
Правда мобильнику gif не по зубам. :)

Gemorroj » 2012.02.20 12:45

tipsun, вот только не нужно хацкерам жопу лизать. 99% т.н. хацкеров малолетние дибилы начитавшиеся хацкера.
взлом приведенной тобой капчи произведет любой хороший программист.

tipsun » 2012.02.20 12:53

Понятно.