Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Пройдёт ли робот?
Форумы портала PHP.SU » PHP » Программирование на PHP » Пройдёт ли робот?

Страниц (2): [1] 2 »
 

1. DeepVarvar - 13 Января, 2009 - 04:20:47 - перейти к сообщению
Пришла мне тут в голову идея.. Без использования GD-библиотеки.. Хотелось бы узнать ваше мнение о том что я наваял.. Мне почему-то смешно.. Но вопрос такой: пройдет ли робот?

В папке лежат картинки цифр (0-9) каждая имеет имя отпечатка md5(цифра) соответственно например: 8f14e45fceea167a5a36dedd4bea2543 .jpg


Есть форма для добавления комментария.
Поля:
1) имя
2) мыло
3) хидден-поле
4) текст

Файл antispam.php:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $contr='';//контрольная строка сначало пуста
  3. $sym=4;//кол-во контрольных цыфирок
  4. for ($sym;$sym>0;$sym--) {
  5.   $rnd=rand(0,9);
  6.   $img=md5($rnd);//получили отпечаток хэша и присвоили
  7.   $contr=$contr.$rnd;//дописали в цикле строку
  8.   print '<img width="18" height="30" border="0" src="images/'.$img.'.jpg">';//вывод рисунка
  9.   }
  10. $contr=md5($contr);//по окончании цикла получили отпечаток от полной строки,
  11.                               //это значение и будет в хидден-поле
  12. ?>


Файл инклюдим туда где надо показывать картинки.. ГЛАВНОЕ ДО ФОРМЫ!!!
При обработке сравниваем значения хидден-поля и md5(введенных цифр)..

Вот собссно и всё... Работает..
2. Ыыы - 13 Января, 2009 - 05:38:42 - перейти к сообщению
А вы внедрите в проект, и месяца через три посмотрите, как много спама будет.
3. Джур - 13 Января, 2009 - 06:11:30 - перейти к сообщению
нет, данный метод очень плох... В том смысле, что данное поле взламывается вполне быстро. Если даже у робота нет подходящего шаблона, кодер напипшет его в приделах 15 минут.

если надо могу описать принцип взлома вашей капатчи либо предложить вариант чуть более стойкий.
4. DeepVarvar - 13 Января, 2009 - 08:42:09 - перейти к сообщению
Джур пишет:
нет, данный метод очень плох... В том смысле, что данное поле взламывается вполне быстро. Если даже у робота нет подходящего шаблона, кодер напипшет его в приделах 15 минут.

если надо могу описать принцип взлома вашей капатчи либо предложить вариант чуть более стойкий.


Стойкости добавит:

$salt='какая-то секретная строка';
$contr=md5($salt.$contr);

А сравнивать будем:

if ($contr==md5($salt.$введенные циферки)) {bla bla bla...}

Кстати если вы обьясните принцып взлома, то впредь таких ащибок делать не стану...
(Добавление)
Ыыы пишет:
А вы внедрите в проект, и месяца через три посмотрите, как много спама будет.

А вы думаете зачем я СЮДА об этом написал? Я абсолютно не уверен в стойкости этого ОООООчень простого скрипта, и в проект внедрять его не собираюсь.. Это игра такая.. Вроде бы не о чём, а внимание и сообразительность развивает.. А если честно то хотелось написать чтото на этом принцыпе нормально работающее (без GD и Header:"bla bla bla: image/jpg")..
5. Stierus - 13 Января, 2009 - 10:47:42 - перейти к сообщению
этот код ни от чего не защитит, т.к. есть прямая зависимость между названиями файлов картинок и строкой, анализатор пишется на коленке за 2 минуты, ещё пара минут на заполнение массива соответствия названия файла с буквой. если уж хочется обойтись без gd-библиотеки, используйте логические вопросы (например, "что светлее, черное или белое", "на какой планете мы живем", "сложите 10 и 15, полученное умножьте на два" ну и в таком духе), только база вопросов должна быть огромной(ну а куда без этого Улыбка), часть из них самогенерирующиеся (арифметические, как минимум) .
6. DeepVarvar - 13 Января, 2009 - 11:48:42 - перейти к сообщению
Stierus пишет:
этот код ни от чего не защитит, т.к. есть прямая зависимость между названиями файлов картинок и строкой, анализатор пишется на коленке за 2 минуты, ещё пара минут на заполнение массива соответствия названия файла с буквой. если уж хочется обойтись без gd-библиотеки, используйте логические вопросы (например, "что светлее, черное или белое", "на какой планете мы живем", "сложите 10 и 15, полученное умножьте на два" ну и в таком духе), только база вопросов должна быть огромной(ну а куда без этого :)), часть из них самогенерирующиеся (арифметические, как минимум) .


Базу вопросов я как-то делал из детских загадок, смотрелось очень даже симпатично..

С "солью" зависимость уже не прямая, в ней ведь может быть все что угодно...
md5() необратим... Брутить? И сколько времени вы будете это делать?
7. EuGen - 13 Января, 2009 - 11:52:33 - перейти к сообщению
Зачем же "брутить"... md5 уже давным давно не является надежным способом хеширования данных. Возможно, следует признать его некриптостойким. Причина тому - rainbow tables:
http://en[dot]wikipedia[dot]org/wiki/Rainbow_table
Защититься можно, но опять же не 100%
8. DeepVarvar - 13 Января, 2009 - 12:07:56 - перейти к сообщению
Цитата:
Защита от радужных таблиц
Данные таблицы невозможно использовать против необратимых хеш-функций, которые включают salt (соль). Например, рассмотрим следующую функцию для создания хеша от пароля:

хеш = MD5( пароль + соль ),
где + обозначает конкатенацию.


Это оттуда.. Я не думаю что кто-то или чт-то будет так рьяно ломать малоизвестный сайтик с никому ненужным содержанием.. Я ведь эту приблуду не собираюсь вешать на серьезный проект.. Улыбка
9. EuGen - 13 Января, 2009 - 12:11:15 - перейти к сообщению
Вы, вероятно, прочли русскоязычный вариант статьи, он несколько неточен. Затравка лишь позволяет увеличить длину исходного набора символов, и, следовательно, увеличивает сложность, а так же может исключить возможность взлома в связи с тем, что таблица расчитана на определенную длину.
Ведь, по сути, если злоумышленник может восстановить из md5 исходные данные, то, восстановив
CODE (text):
скопировать код в буфер обмена
  1.  
  2. строка+соль
  3.  

он может просто перебрать все строки, отрезая по 1 символу с конца, к примеру.
10. DeepVarvar - 13 Января, 2009 - 12:13:27 - перейти к сообщению
В любом случае защиты на 100% не бывает..
EuGen пишет:
Вы, вероятно, прочли русскоязычный вариант статьи, он несколько неточен. Затравка лишь позволяет увеличить длину исходного набора символов, и, следовательно, увеличивает сложность, а так же может исключить возможность взлома в связи с тем, что таблица расчитана на определенную длину.
Ведь, по сути, если злоумышленник может восстановить из md5 исходные данные, то, восстановив
CODE (text):
скопировать код в буфер обмена
  1.  
  2. строка+соль
  3.  

он может просто перебрать все строки, отрезая по 1 символу с конца, к примеру.


отпечаток имеет конечную длину символов...
включаем вторую соль которая будет заменять символы "a" на "f" например или работать по иному алгоритму... И 3 года 3 дня и 3 ночи бот будет заниматься подбором находясь на той странице.. А как же время жизни сессии?
11. EuGen - 13 Января, 2009 - 12:51:37 - перейти к сообщению
Факт то ведь не в том, что защититься совсем никак нельзя. А в том, что md5 - не есть подходящая защита. То есть при желании можно восстановить исходный текст
А всякие заменяющие и иные "соли" - это уже по сути попытка шифрования, и при этом вряд ли мы с Вами сможем (даже если захотим) придумать нечто действительно криптостойкое.
Даже наука есть такая - криптография; вооружившись ею роботописатель легко обойдет любую "соль", сделанную на коленке - был бы исходный текст, ведь по сути самым сложным будет восстановить текст из md5, так как из всех примененных механизмов защиты в этой схеме md5 по-прежнему будет самым стойким звеном (собственно, md5 придумывался не так просто - какое то время его не могли легко обойти).
Вопрос другой - стоит ли овчинка выделки. Ну так и я обобщаю на случай, если она того действительно стоит.
12. DeepVarvar - 13 Января, 2009 - 13:46:08 - перейти к сообщению
Значит так: хеш, хеш(соль(хеш))... Это самое надежное из простого.
13. EuGen - 13 Января, 2009 - 13:50:07 - перейти к сообщению
md5-хеш?...
Ну тогда восстанавливаем 1-й, получаем какую-то строку. Видим, что эта строка имеет длину 32 символа и состоит из 0..f - "что-то тут нечисто" .. и делаем тоже самое снова.. и так далее.
Ладно, это все лишь к тому, что защититься md5 не даст. Уже не даст. Ну так можно использовать более криптостойкие алгоритмы. Возможно, сходу придумать вещи, где мало даже md5, не так просто, но пока что сильнее чем RSA не придумали ничего.(Правда, это уже шифрование, не одно и то же с хешированием)
14. Stierus - 13 Января, 2009 - 15:52:48 - перейти к сообщению
Никто ничего не будет брутить, зачем ? У вас код:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?
  3. $contr='';//контрольная строка сначало пуста
  4. $sym=4;//кол-во контрольных цыфирок
  5. for ($sym;$sym>0;$sym--) {
  6.   $rnd=rand(0,9);
  7.   $img=md5($rnd);//получили отпечаток хэша и присвоили
  8.   $contr=$contr.$rnd;//дописали в цикле строку
  9.   print '<img width="18" height="30" border="0" src="images/'.$img.'.jpg">';//вывод рисунка
  10.   }
  11. $contr=md5($contr);//по окончании цикла получили отпечаток от полной строки,
  12.                               //это значение и будет в хидден-поле
  13. ?>
  14.  

На выходе получается что-то вроде :
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <img width="18" height="30" border="0" src="images/jfyg75lkfugytr8ilwuxj.jpg">
  3. <img width="18" height="30" border="0" src="images/jfyg75lkfugytr8ilwuxj.jpg">
  4. <img width="18" height="30" border="0" src="images/jfyg75lkfugytr8ilwuxj.jpg">
  5. <img width="18" height="30" border="0" src="images/jfyg75lkfugytr8ilwuxj.jpg">
  6.  



вот сама jfyg75lkfugytr8ilwuxj.jpg ссылается на цифру, например, "3" ... значит, заранее зная, что
вот сама jfyg75lkfugytr8ilwuxj.jpg = 3 мы видим всю нужную строку "3333" ... скрипту нужны лишь пути 9-ти картинок и всё

например, скрипт знает (мы зашли и посмотрели исходник), что :

jfyg75lkfugytr8ilwuxj.jpg = 3
jfyg75lkfugytr8ilwuxk.jpg = 4
jfyg75lkfugytr8ilmuxj.jpg = 5
jfyg75lkfugytr9ilwuxj.jpg = 6
jfyg75lkfugytr7ilwuxj.jpg = 7
jfyg75lkfugytr6ilwuxj.jpg = 8
jfyg75lkfugytr5ilwuxj.jpg = 9
и тд

таким образом ты что бы не подставлял, мы получаем конечное число простой заменой путей конкретных цифр на их значения.

Какие хэширования и взлом, о чём вы ?Улыбка
15. EuGen - 13 Января, 2009 - 15:55:49 - перейти к сообщению
Поправлю - хеширования. Вне зависимости от контекста.
Правда в данном случае "ломать" действительно нечего, автору следует подумать как защитить иными средствами.

 

Powered by ExBB FM 1.0 RC1