Вы не зашли.
#1.
TLENS
Off
(14)
Moderator
2011.07.11 02:02
Немного обдумывал как бротся со спамерами.
То сейчас многих раздражает капча, и меня в том числе.
Мож я чего то упустил?
Вообщем есть идея написать скрипт который будет полноценно наблюдать за каждым.
Но есть пару вопросов кто нить уже думал об этом, и реально ли такое?
реально всё, но, думаю, малоэффективно будет)
ну можно упростить пользователям жизнь используя текстовую капчу хотябы. вставляя рандомно всякий шлак, затрудняющий распознавание для ботов.
например, span теги, заменять символы на unicode последовательности. такой подход используется на govnowap.ru и wapinet.ru. помогает от ботов в 90% случаев.
Gemorroj, только заметил, никогда не приходило в голову. Возьму к сведению, спасибо
Ну капча, конечно, достаёт, но графическая - это лучший способ защиты на данный момент, хоть что с этим делай. Но и её можно обойти(ещё зависит от её замудрённости).
#6.
TLENS
Off
(14)
Moderator
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)
#10.
TLENS
Off
(14)
Moderator
2011.07.12 18:06
GemorrojСПС
Я вот подумал и надумал вот что. Видел один демотиватор, как там типа человек может читать слова, даже если буквы кроме первой и последней (вроде или 2х первых и последних) в нем разбросаны/переставлены/не на своих местах. Думаю сделать такую каптчу. Давать слова разбросанные, а вводили чтоб нормальные или числа (чтеыре=4).
Пока не знаю как реализовать, но думаю стоит попробовать.
- - - -
Ну может быть сначала нормальное слово в мд5 заширить, потом в input hidden. И после перемещать исходное и показать пользователю.
Вот эта тема:
habrahabr.ru/blogs/programming/122163/а там до меня уже додумались
Отредактировано tipsun (2011.09.20 10:10)
интересная идея.
вот только md5 хэш нельзя светить, иначе просто переставляя буквы и сверяя хэш, можно получить правильное слово.
тут нужен просто массив соответствий array('чтеыре' => 'четыре');
Цифры будет легко разгадать. Там всего то: 1, 4-20, 30-90-1000 ну одно слово чтоб было.
С телефона писал, может че неправильно. Уже забыл код
Код:
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)
нет, так не получится с мультбайтовой кодировкой.
Ну я вспомнил сейчас
Там mb_substr(), mb_strlen(). А вот суффле нет
Добавлено спустя 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;}?> |
Чет у меня пока нет хороших мыслей как реализовать: первую и последнюю не трогая перемещать буквы.
Код:
preg_split('//u', 'слово') дает [0]=null, [1]='c' ... [last]=null |
|
unset($array[0], $array[последний ключ/знач]) |
можно... |
Отредактировано tipsun (2011.09.20 20:08)
Код:
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)
Я уже знаю что ответят: "Сделай класс!"
Да и так все класс
Ну а по делу, да надо бы.
Сразу там же проверку сделать.
- - - -
Можно было бы просто массив со словами >3 букв.Код:
span style="color: #0000BB"><?php//Проверкаif(in_array($_GET['captcha'], $captchaLib)) { echo 'All right!'; }//Бред, не смотрите =)?> |
Отредактировано tipsun (2011.09.21 19:07)
ну если знаешь, то почему не делаешь?)
Сделаю, попозже. Не все сразу.
Отредактировано tipsun (2011.09.20 23:11)
Не получается. Не знаю как именно там так же красиво все прописать.
- - - -
Как я сейчас понял сессию для гостя все равно придется начать
Код:
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)
Нормально или как всегда г.+?
Отредактировано tipsun (2011.09.21 23:11)
используй сеттеры и геттеры.
т.е. не echo $captcha->code; а, echo $captcha->getCode(); в методе getCode просто return $this->code; а переменные все приватными или защищенными сделай.
#26.
TLENS
Off
(14)
Moderator
2011.09.22 12:12
Чушь полная гг.
Забей в поиск "чтеыре" и получишь четыре. Это только один из ста вариантов взлома такой капчи разве что на картинку кидать и толку.
Отредактировано TLENS (2011.09.22 12:12)
А как тогда?
Неужеди все способы г.+?
С картинкой тогда делать?
- - - -
Если г.+ тогда можно просто картинку с цифрами. Че мудрить тогда.
Отредактировано tipsun (2011.09.22 21:09)
Норм? 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)
На те капчу...только числа с мусором...
Код:
$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); |
Я писал разноцветную, но "нахера" - потом спросил себя?
Вот идея у тебя хорошая, с сессии брать число.
Вот, вроде работает.
Как отдельный файл, просто указать
Код:
<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);?> |
Отредактировано tipsun (2011.09.28 16:04)
#31.
TLENS
Off
(14)
Moderator
2011.09.28 16:04
видимо не скажем такого))
Я буду рад
Особенно если получилось лучше чем в ZF. Отмечать буду
Отредактировано tipsun (2011.09.28 17:05)
а смысл в этик самописных капчах? ее взломать достаточно просто. почему бы не взять готовые проверенные решения?
Ну это все равно что пойти в банк спермы для своей жены
#35.
TLENS
Off
(14)
Moderator
2011.09.29 06:06
tipsunДа нет ты ошибаешься.
Да если так взять, то че париться: поставил DCMS, JohnCMS, Motor, Rotor и все, но хочется самому написать что-то
tipsun, ну это разные вещи все-таки, имхо)
только если изначально стояла цель написать именно компонент для капчи. если же пишется, скажем, блог или форум, то изобретать таки велосипеды, как капча, имхо, смысла нет.
Ну, вам видней.
#40.
wexc
Off
(2)
Участник
2011.09.30 23:11
видал капчу на буржуйском сайте там три фигурки их надо мышкой выставить правильно после чего можно писать сообщения. вот это думаю супер капча
Отредактировано wexc (2011.09.30 23:11)
Gemorroj, тебе и
TLENSy
Добавлено спустя 2 минуты 54 секунды: wexc, ну это наверно JS. На мобильном не прокатит, наверно.
Отредактировано tipsun (2011.10.01 15:03)
это вообще, flash, наверное
#43.
wexc
Off
(2)
Участник
2011.10.01 19:07
не не флеш что то другое
#45.
wexc
Off
(2)
Участник
2011.10.02 01:01
да я уже не помню но точно знаю если бы была флешка то я бы ее выдернул на память
Вот еще пришла в голову мысль.
Делать каптчу либо на русском, либо на английском.
В этой captcha заменить похожие друг на друга буквы (шрифт подобрать такой, чтоб различий вообще не было видно).
Ну по идее бот должен полностью скопировать и вставлять текст. А человек должен будет прописать.
- - - -
ХАВpx- - - -
Можно даже не указывать на каком языке ввести, просто принимать и на том и на другом языке в чистом виде (исключая другой).
Что насчет этого думаете?
Отредактировано tipsun (2011.11.20 09:09)
ммм.. текстовая капча? человек тоже может ее скопировать. картинка? о каком копировании ботом тогда идет речь..?
Нет, текстовая.
А вроде есть ведь свойство у 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)
ну, может-быть, может быть. правда опять-же. это никак не спасет от специально написанных под такой алгоритм роботов.
А какой алгоритм может быть универсален, изображение?
типо того. что сложно распарсить роботу. картинки, видео, флэш, java апплеты.. хз)
Очередная говноидея...
Код:
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);?> |
Отредактировано tipsun (2011.11.22 23:11)
не, обходится элементарно.
а в текущей реализации даже простым трафаретом. без искревлений букв рандомных даже рассматривать, имхо, не стоит.
Добавлено спустя 2 минуты 1 секунду: вот
- по-моему отличная реализация.
Вот еще текстовая интересная [»
captcha]
Вложения
symb.JPG
14kb
{488x208}
[
загрузок: 1078]
Отредактировано tipsun (2011.11.23 11:11)
А вот еще читал про анимированную каптчу. Как насчет gif?
Её тоже легко разложить на кадры итд?
- - - -
Или, вот еще вспомнил, задачка из телеканала:
Сколько треугольников нарисованно?
Сколько линий?
Сколько точек пересечения?
А вообще конечно эти хакеры гении.
Какие хочешь способы взлома, распознавания они придумывают.
Еще умудряются вычислять градусы искажения. Вообще...
И 3D каптчу там тоже было написано можно сломать вычислениями.
Вложения
test.jpg
2kb
{100x50}
[
загрузок: 1018]
Отредактировано tipsun (2012.02.20 12:12)
Например собрать 4-5 искаженных изображений в gif. Задать пользователю: введи число с X кадра.
Правда мобильнику gif не по зубам.
Отредактировано tipsun (2012.02.20 12:12)
tipsun, вот только не нужно хацкерам жопу лизать. 99% т.н. хацкеров малолетние дибилы начитавшиеся хацкера.
взлом приведенной тобой капчи произведет любой хороший программист.