Не могу назвать себя про в области РНР, поэтому хотел бы спросить у знатоков - насколько уязвимо то, что я сделал?
Итак:
1) Есть 10 джепегов, в каждом по одной циферке.
2) При входе юзера на страницу с формой регистрации создается простая сессия (session_register), с одной переменной, которая хранит 4-значное рэндом число.
3) На месте изображения вместо джепегов <img src="captcha.php">.
4) captcha.php берет рэндом, хранящийся в сессии, и с помощью imageCreateFromJPEG создает соответствующий динамический джепег из четырех джепегов с циферками.
5) reg.php осуществляет проверку даннных, введенных в форму, в том числе соответствие введенных юзером циферок тому, что хранится в сессии (и соответствует выведенному джепегу)
6) если циферки юзер ввёл неправильно, регистрационная форма перегружается с уже новой сессией и соответственно новым рэндом-числом на динамическом джепеге; если ввёл верно, происходит регистрация и сессия дестроится.
.
Таким образом (насколько я понимаю) секретное число нигде не фигурирует, никаких input type="hidden" не треубется и вроде как всё безопасно.
Вопрос того насколько сложно выглядят циферки оставим в стороне.
Адрес дать не могу, извините, есть причины.
Прошу Вас оценить эту схему. Заранее признателен!
Спустя 8 минут, 2 секунды (14.09.2010 - 15:14) waldicom написал(а):
1. Скрипт будет просто летать на слабых машинках, это +
2. 10000 различных вариантов капчи (если я правильно посчитал... а я правильно посчитал), причем скорее всего у каждой свой md5. Перебираться такие варианты будут конечно миллион лет. Это +
2. 10000 различных вариантов капчи (если я правильно посчитал... а я правильно посчитал), причем скорее всего у каждой свой md5. Перебираться такие варианты будут конечно миллион лет. Это +
Спустя 12 минут, 54 секунды (14.09.2010 - 15:27) Artur написал(а):
md5 не используется никак.
А минусы? ))
А минусы? ))
Спустя 25 секунд (14.09.2010 - 15:27) waldicom написал(а):
Цитата (Artur @ 14.09.2010 - 14:27) |
md5 не используется никак. А минусы? )) |
эммм... мда...
Спустя 4 минуты, 14 секунд (14.09.2010 - 15:32) Artur написал(а):
Не могли бы Вы пояснить?
Спустя 4 минуты, 37 секунд (14.09.2010 - 15:36) waldicom написал(а):
Цитата (Artur @ 14.09.2010 - 14:32) |
Не могли бы Вы пояснить? |
Мог бы... Вы читали книжку "Вредные советы" Григория Остера. Вот тут та же самая идея.
В нормальном виде мой пост мог бы выглядеть так:
1. Скрипт будет нагружать сервер, причем этого можно избежать
2. Слишком мало вариантов капчи, причем те варианты, что есть, можно легко сравнить и следовательно обойти.
Спустя 17 минут, 1 секунда (14.09.2010 - 15:53) Artur написал(а):
1) Я понимаю, работа gd нагружает сервер, но у меня используются джепеги вес каждого из которых чуть больше килобайта. Разве это дает сколь-нибудь ощутимую нагрузку?
2.1) Если мало вариантов, можно сделать не 4 цифры, а, скажем, 8. Или кроме цифр добавить буквы. Это уже вопрос десятый. Главное, что мне бы хотелось понять - насколько достоин существования сам алгоритм?
2.2) Что Вы имеете ввиду под "можно легко сравнить"?
2.1) Если мало вариантов, можно сделать не 4 цифры, а, скажем, 8. Или кроме цифр добавить буквы. Это уже вопрос десятый. Главное, что мне бы хотелось понять - насколько достоин существования сам алгоритм?
2.2) Что Вы имеете ввиду под "можно легко сравнить"?
Спустя 7 минут, 53 секунды (14.09.2010 - 16:01) waldicom написал(а):
2.1. чем больше цифр, тем сложнее, думаю это ясно всем. Тут надо найти компромисс между безопасностью и удобством для пользователя. А если еще и буквы в игре, то вообще хорошо.
2.2. Полагаю, что алгоритм соединения картинок в одну большую у Вас один и тот же. Тогда берем все Ваши картинки, составляем 10000 капч, вычисляем их md5. Затем на странице берем md5 вашей капчи и сравниваем со своими. Если подошла - капча разгадана.
2.2. Полагаю, что алгоритм соединения картинок в одну большую у Вас один и тот же. Тогда берем все Ваши картинки, составляем 10000 капч, вычисляем их md5. Затем на странице берем md5 вашей капчи и сравниваем со своими. Если подошла - капча разгадана.
Спустя 26 минут, 11 секунд (14.09.2010 - 16:27) Michael написал(а):
Цитата (Artur @ 14.09.2010 - 14:06) |
Прошу Вас оценить эту схему. Заранее признателен! |
Что у тебя сделано против этого ?
Спустя 26 минут, 29 секунд (14.09.2010 - 16:54) Guest написал(а):
Micahel, ничего. А разве против "этого" можно что-то сделать?
Waldicom, Вы меня простите, я возможно чего-то круто недопонимаю, но где и как Вы возьмёте хэш текущей капчи?
Waldicom, Вы меня простите, я возможно чего-то круто недопонимаю, но где и как Вы возьмёте хэш текущей капчи?
Спустя 1 минута, 49 секунд (14.09.2010 - 16:56) Michael написал(а):
можно утяжелить грабберу отдачу картинки индусам, поглючить тоесть.
Спустя 9 секунд (14.09.2010 - 16:56) waldicom написал(а):
Цитата (Guest @ 14.09.2010 - 15:54) |
я возможно чего-то круто недопонимаю, но где и как Вы возьмёте хэш текущей капчи? |
Мы сейчас говорим о возможности обойти капчу, правильно?
В таком случае берем картинку текущей капчи (простыми словами скачиваем её себе на комп и рассчитываем её контрольную сумму)
Спустя 10 минут, 58 секунд (14.09.2010 - 17:07) DedMorozzz написал(а):
Michael
лишь не популярными мерами. Учитывая, что капча и так не популярная мера, ухудшать положение - явно не стоит. Лишь если будет волна спама от индусов. Там уже можно придумать очень много решений... Но для посетителя будет накладно.
А если это регистрация - то тут убрать капчу и заменить на подтверждение по мылу.
лишь не популярными мерами. Учитывая, что капча и так не популярная мера, ухудшать положение - явно не стоит. Лишь если будет волна спама от индусов. Там уже можно придумать очень много решений... Но для посетителя будет накладно.
А если это регистрация - то тут убрать капчу и заменить на подтверждение по мылу.
Спустя 3 минуты, 5 секунд (14.09.2010 - 17:10) Artur написал(а):
Waldicom - Да, мы говорим о возможности обойти такую капчу автоматически, что позволит роботу автоматически регистрироваться и спамить.
Чтобы получить хэш с картинки, Вам надо её своими глазами распознать. Взлом - уже не взлом, если для этого нужно работать своими глазами, правильно?
Я не пойму о чём Вы говорите.
Чтобы получить хэш с картинки, Вам надо её своими глазами распознать. Взлом - уже не взлом, если для этого нужно работать своими глазами, правильно?
Я не пойму о чём Вы говорите.
Спустя 1 минута, 11 секунд (14.09.2010 - 17:11) twin написал(а):
Подтвеждение тоже давно обходится. Тут только свои изобретения помогают. А своими алгоритмами делиться - значит снижать эфективность.
Вот это задача для программиста, а не для кодера кстати.
Вот это задача для программиста, а не для кодера кстати.
Цитата |
Вам надо её своими глазами распознать. |
Верно. Но один раз. А потом стопицот постов засунуть мерзких.
Спустя 4 минуты, 45 секунд (14.09.2010 - 17:16) Artur написал(а):
Twin - мой алгоритм очень прост, адрес сайта я не давал, так что эффективность снижена едва ли
Чтоб мерзких постов не было, такая же капча легко прикручивается и к отправке сообщений (Конечно же только в том случае, если реально посыпется спам).
Чтоб мерзких постов не было, такая же капча легко прикручивается и к отправке сообщений (Конечно же только в том случае, если реально посыпется спам).
Спустя 3 минуты, 1 секунда (14.09.2010 - 17:19) Artur написал(а):
Waldicom - я так и не могу понять для чего тут может понадобится md5 при попытках обойти эту капчу.
Спустя 5 минут, 42 секунды (14.09.2010 - 17:24) twin написал(а):
Так о том и речь, что расковырять эту капчу - не велика задача. Если к ресурсу будет интерес, расковыряют за час и заспамят все подряд.
Скачают картинки, назовут 1.gif, 2.gif и так далее. Посчитают md5 хэш файлов, а потом будут сравнивать этот хэш с хэшем картинки на капче. Если они объединяются в одну - вариантов всего 10000 штук, так что ни первая часть аферы, ни вторая, затруднений не вызовут.
Скачают картинки, назовут 1.gif, 2.gif и так далее. Посчитают md5 хэш файлов, а потом будут сравнивать этот хэш с хэшем картинки на капче. Если они объединяются в одну - вариантов всего 10000 штук, так что ни первая часть аферы, ни вторая, затруднений не вызовут.
Спустя 18 минут, 28 секунд (14.09.2010 - 17:43) Artur написал(а):
Twin,
а сколько раз нужно нажать F5, чтобы получить 10 тыщ разных рэндомных четырехзначных чисел, и чтобы в итоге получить все возможные хеши? По-моему ооочень долго.
а сколько раз нужно нажать F5, чтобы получить 10 тыщ разных рэндомных четырехзначных чисел, и чтобы в итоге получить все возможные хеши? По-моему ооочень долго.
Спустя 2 минуты, 28 секунд (14.09.2010 - 17:45) DedMorozzz написал(а):
Разве? Первое что в голову пришло - ставлю на крон скрипт, который полученные данные логирует. И по утру я читаю все комбинации.
Спустя 1 час, 59 минут, 43 секунды (14.09.2010 - 19:45) Basili4 написал(а):
twin
Цитата (twin @ 14.09.2010 - 18:11) |
А своими алгоритмами делиться - значит снижать эфективность. |
Я вот тут не соглашусь. алгоритм можно выведать. И надеятся на то что ваш алгоритм не кто не узнает не стоит. вот если отдать ваш алгоритм на растерзание мне кажется будет больше пользы. будут видны слабые стороны и огрехи всяческие.
Спустя 20 часов, 51 минута, 40 секунд (15.09.2010 - 16:37) Sender написал(а):
А если оберазать md5 хэш c помощью substr(); ?
Тогда по идее, роботами не заспамят .
Тогда по идее, роботами не заспамят .
Спустя 5 минут, 6 секунд (15.09.2010 - 16:42) Basili4 написал(а):
Sender
Уменьшить количество вариантов. единственное что может действительно помочь это генерация случайного мусора на фоне. точки там запятые
Уменьшить количество вариантов. единственное что может действительно помочь это генерация случайного мусора на фоне. точки там запятые
Спустя 10 минут, 31 секунда (15.09.2010 - 16:52) Гость_Michael написал(а):
Цитата (DedMorozzz @ 14.09.2010 - 14:07) |
Michael лишь не популярными мерами. Учитывая, что капча и так не популярная мера, ухудшать положение - явно не стоит. Лишь если будет волна спама от индусов. Там уже можно придумать очень много решений... Но для посетителя будет накладно. А если это регистрация - то тут убрать капчу и заменить на подтверждение по мылу. |
посетитель разницы не заметит. Работы добавится программисту. И соответственно тому кто будет расковыривать.
Что посетитель увидит? - да обычное - какие то буквы и цифры и для них поле ввода.
Например можно три прозрачных картинки спозиционировать относительно друг друга. А чтобы "это" отдать индусам на распознание граберу придется собрать из них одну картинку, а для этого как минимум парсить таблицу стилей или js-код. Грабельщиков много, но за бесплатно тоже никто не работает, особенно когда не все так просто.
Спустя 41 минута, 55 секунд (15.09.2010 - 17:34) twin написал(а):
Я не понимаю, что за блажь делать капчу из картинок. Ведь гораздо надежнее, проще и экономичнее использовать шрифты. Вот я себе так представляю твой вариант:
Вычислить md5 хэши картинок - не велика проблема.
Даже если взять не 10000 вариантов, а всего 500, то условно каждый 20-й запрос будет успешным.
Ты наверно плохо представляешь этот алгоритпм. Капча скачивается на свой сервак и от этой картинки функцией md5_file() берется хэш. Он пишется в базу свместе со значением. Потом просто берем капчу с формы и сравниваем с тем, что есть в базе. Попали - ура. Не попали - обновляем капчу и снова. 500 вариантов можно за час набить.
Чтобы этого было сделать невозможно, нужно пустить случайных помех:
Тогда хэшей будет не 10000, а на несколько порядков больше и операция потеряет смысл.
Однако такую капчу весьма несложно разобрать по пикселям. И тупо прочитать надпись. Чем меньше вариантов, тем проще. По этому лучше использовать заковыристый шрифт. А это мало того, что увеличит к-во вариантов, снизит ресурсоемкость:
Теперь, если немного подумать, можно использовать не только цифры, но и буквы.
Эта борьба идет давно и такими простыми, как у тебя методами можно бороться только тогда, когда ты как индеец ДЖО никому не нужен. А если усложнять - неудобно юзеру. Поэтому думай, если что изобретешь - я первый на очереди.
Скрипт с шрифтом в аттаче на вс. случай.
<?php
session_start();
$_SESSION['key'] = rand(0, 9) . rand(0, 9) . rand(0, 9) . rand(0, 9);
$d1 = imagecreatefromgif('./pic/'. $_SESSION['key'][0] .'.gif');
$d2 = imagecreatefromgif('./pic/'. $_SESSION['key'][1] .'.gif');
$d3 = imagecreatefromgif('./pic/'. $_SESSION['key'][2] .'.gif');
$d4 = imagecreatefromgif('./pic/'. $_SESSION['key'][3] .'.gif');
$im = imagecreatetruecolor(276, 74);
imagecopy($im, $d1, 0, 0, 0, 0, 69, 74);
imagecopy($im, $d2, 69, 0, 0, 0, 69, 74);
imagecopy($im, $d3, 138, 0, 0, 0, 69, 74);
imagecopy($im, $d4, 207, 0, 0, 0, 69, 74);
header('Content-type: image/gif');
imagegif($im);
Вычислить md5 хэши картинок - не велика проблема.
Даже если взять не 10000 вариантов, а всего 500, то условно каждый 20-й запрос будет успешным.
Ты наверно плохо представляешь этот алгоритпм. Капча скачивается на свой сервак и от этой картинки функцией md5_file() берется хэш. Он пишется в базу свместе со значением. Потом просто берем капчу с формы и сравниваем с тем, что есть в базе. Попали - ура. Не попали - обновляем капчу и снова. 500 вариантов можно за час набить.
Чтобы этого было сделать невозможно, нужно пустить случайных помех:
<?php
session_start();
$_SESSION['key'] = rand(0, 9) . rand(0, 9) . rand(0, 9) . rand(0, 9);
$d1 = imagecreatefromgif('./pic/'. $_SESSION['key'][0] .'.gif');
$d2 = imagecreatefromgif('./pic/'. $_SESSION['key'][1] .'.gif');
$d3 = imagecreatefromgif('./pic/'. $_SESSION['key'][2] .'.gif');
$d4 = imagecreatefromgif('./pic/'. $_SESSION['key'][3] .'.gif');
$im = imagecreatetruecolor(276, 74);
imagecopy($im, $d1, 0, 0, 0, 0, 69, 74);
imagecopy($im, $d2, 69, 0, 0, 0, 69, 74);
imagecopy($im, $d3, 138, 0, 0, 0, 69, 74);
imagecopy($im, $d4, 207, 0, 0, 0, 69, 74);
$color = imagecolorallocate($im, 0, 0, 0);
for($i = 0; $i < 5; $i++)
imageline(
$im,
mt_rand(0, 100),
mt_rand(0, 74),
mt_rand(100, 276),
mt_rand(0, 74),
$color
);
header('Content-type: image/gif');
imagegif($im);
Тогда хэшей будет не 10000, а на несколько порядков больше и операция потеряет смысл.
Однако такую капчу весьма несложно разобрать по пикселям. И тупо прочитать надпись. Чем меньше вариантов, тем проще. По этому лучше использовать заковыристый шрифт. А это мало того, что увеличит к-во вариантов, снизит ресурсоемкость:
<?php
session_start();
$_SESSION['key'] = rand(0, 9) . rand(0, 9) . rand(0, 9) . rand(0, 9);
$im = imagecreatetruecolor(170, 74);
$bg = imagecolorallocate($im, 245, 242, 240);
$color = imagecolorallocate($im, 0, 0, 0);
imagefill($im, 0, 0, $bg);
imagettftext($im, 50, 0, 10, 50, $color, '1.ttf', $_SESSION['key']);
for($i = 0; $i < 5; $i++)
imageline(
$im,
mt_rand(0, 100),
mt_rand(0, 74),
mt_rand(100, 170),
mt_rand(0, 74),
$color
);
header('Content-type: image/gif');
imagegif($im);
Теперь, если немного подумать, можно использовать не только цифры, но и буквы.
Эта борьба идет давно и такими простыми, как у тебя методами можно бороться только тогда, когда ты как индеец ДЖО никому не нужен. А если усложнять - неудобно юзеру. Поэтому думай, если что изобретешь - я первый на очереди.
Скрипт с шрифтом в аттаче на вс. случай.
Спустя 18 часов, 35 минут, 30 секунд (16.09.2010 - 12:10) Artur написал(а):
Twin, спасибо большое за совет, особенно за наглядный!
Это не блажь, это "как умею" )) Как писал "у первых строках", я не профессионал в программировании.
Недостатки мне ясны. Но, думаю, логично будет начать с того как есть сейчас. Главное ведь - аудитория! Мало ли, может у меня и правда Джо окажется :) Сначала надо раскрутить форум, потом подождать пока возникнут проблемы со спамом (если возникнут), и только потом думать каким образом укреплять защиту. Наверное так.
Это не блажь, это "как умею" )) Как писал "у первых строках", я не профессионал в программировании.
Недостатки мне ясны. Но, думаю, логично будет начать с того как есть сейчас. Главное ведь - аудитория! Мало ли, может у меня и правда Джо окажется :) Сначала надо раскрутить форум, потом подождать пока возникнут проблемы со спамом (если возникнут), и только потом думать каким образом укреплять защиту. Наверное так.
Спустя 29 минут, 21 секунда (16.09.2010 - 12:39) twin написал(а):
Абсолютно верное решение.