Просмотр полной версии : Забудем про captcha
[Intro]
С недавнего времени я начал изучать AJAX библиотеку jQuery (http://www.jquery.com)..
На мой взгляд это лучшая, удобная и легкая либа для AJAX...
Прочитав некоторые статьи, доки по либе я решил сделать так, чтобы пользователям на вашем сайте не пришлось смотреть на закорюченные символы :)
[Start]
Имеем форму:
<form method="post" id="xek">
Text: <input type="text" name="text" /><br/>
<input type="submit" name="sub" value="Ok" />
</form>
Ну тут роботу ничего не стоит как отправлять POST запросы text=ss,sub=Ok на наш скрипт...
А если добавить через js некую форму.....
В хидере( Между <head> и </head>) страницы напишем следующее:
<script src="jquery-1.2.3.pack.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$.get("md5.php",function(hash)
{
$("#xek").append('<input type="hidden" name="code" value="'+hash+'" />');
});
});
В этом коде мы делаем GET запрос (сразу при загрузке страницы с формой) к файлу md5.php, получаем оттуда данные и jQuery сам вставляет новый инпат в нашу форму на странице, но исходный код страницы при этом не изменяется..
в md5.php мы можем выводить допустим такое:
<?php
echo md5($_SERVER['REMOTE_ADDR']).'xekxek');
?>
Тем самым если робот будет отправять пост запросы через обычную форму, то скрипт его не пропустит, потому что проверить робот это или нет можно след.кодом:
<?php
if(!isset($_POST['hash']) || $_POST['hash'] != md5($_SERVER['REMOTE_ADDR']).'xekxek')) echo 'You are not human';
?>
[End]
Вы скажите, а что сложного человеку посмотреть JS код, узнать файл md5.php и ботом сначала парсить инфу оттуда?
Ну так существует ведь http://ru.wikipedia.org/wiki/Обфускация JS кода с помощью которой вам надо обфуцировать небольшой JS код в хидере..
Спросите вы: А разве сложно его раскодировать?
Отвечаю также: А разве сложно его хорошо криптануть??)))
Либо еще лучше подключить мод реврайт и отправлять запросы на что-то типа
<?php
$_SERVER['REMOTE_ADDR'].time();
?>
/IP_time.jpg
Так уже даже можно название файла не прятать т.к. пока робот зайдет на файл и отправит форму, то значения time() будут разные
Либо вообще в md5.php создавать сессию с указанным выше содержимым и если форма отправляется без сессии, то робот! :)
GreenBear
16.04.2008, 09:03
ты забыл про безскриптовых людей.. к тому же гораздно проще давать рандомные имена полям формы еще перед генерацией странице, я кстати писал об этом ..
GreenBear, да, тоже вариант, а безскриптовые люди сделать ничего не смогут если допустим сделать еще проверку по IP :)
неее буду лечше на ранмоде(типа капча) сидеть,по мне эфективнее. и некие мои замороченные проверочки.
GreenBear
16.04.2008, 15:30
исис, в том то и дело что они НИЧЕГО сделать не смогут ....
GreenBear, с чего ты взял?
Если у них включен javascript, то jquery сделает свое дело...
GreenBear
16.04.2008, 17:00
)))))))
а если нет ?
исис, в том то и дело что они НИЧЕГО сделать не смогут ....
Сам факт того что ты юзаешь jQuery, или любую аяксовую либу, говорит о том, что твой сайт заточен под людей с включеным js. (А на людей с выключеным js ты в принципе забил, равно как и на любителей старых или специфических браузеров)
В этом коде мы делаем GET запрос (сразу при загрузке страницы с формой) к файлу md5.php, получаем оттуда данные и jQuery сам вставляет новый инпат в нашу форму на странице, но исходный код страницы при этом не изменяется..
А что мешает выяснить как сервак возвращает этот хеш и научить робота заходить на страницу и снифать его от сервера, а потом дописывать в запрос при отправке?
З.Ы.
Прошу прощения, что разными сообщениями.
З.З.Ы.
Лучше вместо запроса яваскриптом ответа с сервера, как тут:
<script type="text/javascript">
$(document).ready(function()
{
$.get("md5.php",function(hash)
{
$("#xek").append('<input type="hidden" name="code" value="'+hash+'" />');
});
});
Просто тупо зашить ещё на сервере это поле в скрипт и пройтись обфускатором. Тогда если снифать трафф, ты не получишь хеш, а получишь только страницу целиком.
Ну и логичный вывод - Тогда, а при чём тут jQuery и аякс, если речь идёт о клиентской генерации элементов страницы яваскриптом :)))
hackconnect
16.04.2008, 18:44
кстати генерация рандомных имен полей неэффективна имхо - что мешает боту скачать и отпарсить форму? Да и кодить под этот сабж тоже тот еще гемор.
а если нет ?
носкрипт и капча :) ибо этот метод неприменим тогда :)
Ну и логичный вывод - Тогда, а при чём тут jQuery и аякс, если речь идёт о клиентской генерации элементов страницы яваскриптом ))
ты не понял о чем речь.
ты не понял о чем речь.
Да ладно, он предлагает генерить сервером на странице jQuery код, который будет генерить скрытое поле которое будет передавать на сервер хеш, который будет аяксовыми методами спрашиваться у сервера.
Фишка в том, что сначала клиенту отдаётся страница с яваскриптом, который этот запрос хеша и сгенерит, затем аяксом запрос "дай мне хеш" уйдёт на сервер, и вот после этого уже можно снифать ответ от сервера. Всё.
Если непонятно:
1) Серверу отдаётся страничка с яваскриптом (обработано обфускатором)
2) Яваскрипт на клиенте запрашивает у сервера хеш-код для скрытого поля
3) сервер возвращает хеш-код
4) при запросе, на сервер передаётся этот хеш код
5) они там сравниваются
А теперь прикинь, что между 2 и 3 я включил снифер.
hackconnect
16.04.2008, 18:52
хм, значит я подумал что метод умнее ?)
лучше тогда сервер тупо пусть досылает картинку и инпут.
Либо вообще в md5.php создавать сессию с указанным выше содержимым и если форма отправляется без сессии, то робот! :)
Ну а что мешает спереть сессию? Если до отправки формы включили сниффер.
Т.е. когда тебе уже пришла страница, но когда на md5.php запрос ещё не ушёл.
Хех..ну попробуй :)
А в чём проблема зафиксировать любой траффик между клиентом и сервером??? (Если ты и есть клиент :) )
hackconnect
16.04.2008, 20:01
это уже такие дебри что ппц ->|
ага, убрал уже :D
лучше имхо то, что я предложил..
это уже такие дебри что ппц ->|
ага, убрал уже :D
лучше имхо то, что я предложил..
Ну или если оч не хочется напрягать юзера, то куда надёжнее генерить хеш ещё до того как отдаёшь страницу юзеру, потом писать его в js ещё на сервере, пройтись обфускатором и отдать клиенту. Тогда и аякс не нужен и проблем с MIM не будет :)
GreenBear
16.04.2008, 20:12
метод исиса для мазахистов и тех, кому наплевать на своих юзверей имхо. я вообще не переношу сайты где обязательный скрипты.. как дополнение - хорошо, пусть юзает кому нравится.. но и без скриптов сайт обязан быть ничем не хуже для пользователя.
кстати генерация рандомных имен полей неэффективна имхо - что мешает боту скачать и отпарсить форму? Да и кодить под этот сабж тоже тот еще гемор.
ничего не мешает, поэтому самая лучшая защита - картинка.
кодить ничего не сложнее, разве на пару строк больше.
Картинки с животными/предметами рулят. Выбери кошку, собаку, велосипед и т.д. Боты отдыхают)
Рулит вот что:
Перетащи треугольник в треугольную форму и пиши камент =\
astrologer
17.04.2008, 20:51
По-моему, только лишний запрос к серверу.
Ajax вообще не для этого нужен, а здесь он, фактически, только дань моде. Если бот способен разобрать JS - то такой метод не спасёт, если не способен - то и Ajax ни к чему.
Сам я не сторонник использования библиотек, если оно нерационально - мне сложно понять, зачем навешивать на страницу jQuery ~80кб, а потом писать вот так:
function ssha1_dec(sha1_decode)
{
$.post("tools.php", { sha1_de: document.getElementById("sha1_de").value },
function(data)
{
document.getElementById("sha1de_ext").innerHTML = data;
});
}
function who_is(whois)
{
$.post("tools.php", { whois: document.getElementById("whois").value },
function(data)
{
document.getElementById("whois_ext").innerHTML = data;
});
}
function reverse_ip(reverse)
{
$.post("tools.php", { reverse: document.getElementById("reverse").value },
function(data)
{
document.getElementById("reverse_ext").innerHTML = data;
});
}
Способ отнюдь гавно.
1) Как уже говорилось, не будет пахать у людей с отключенным JS или старыми браузерами.
2) echo md5($_SERVER['REMOTE_ADDR']).'xekxek'); при таком раскладе на каждый ип будет всегда один и тотже хеш, узнать его труда не составит, а затем твой способ улетает в сортир.
кстати md5($_SERVER['REMOTE_ADDR']).'xekxek'); в каком месте тут лишняя скобка?
Спросите вы: А разве сложно его раскодировать?
Отвечаю также: А разве сложно его хорошо криптануть??)))
Как бы ты его не кодировал, JS можно будет расшифровать.
Либо вообще в md5.php создавать сессию с указанным выше содержимым и если форма отправляется без сессии, то робот!
Щас все нормальные спамеры, регеры и прочая нечисть, юзают куки...
$_SERVER['REMOTE_ADDR'].time();
Вот это вообще непонятно. Какой смысл делать такую конструкцию без сессии? А если ее делать с сессией, и делать замер времени между выдачей формы и ее отправкой, тогда этот код неуместен.
Как дополнительная проверка к капче, JS с обфускацией довольно неплохая идея. Но для этого AJAX не нужен (нормальному боту пофигу как запрашивать страницы, он с одинаковой эффективностью и AJAX симитирует, и обычный запрос).
Как самостоятельная проверка - очевидно что такой способ проигрывает капче в эффективности.
Как не прячь JS, он всеравно остается исполняемым кодом, который можно загнать в JS интерпретатор и обойти все обфускации и крипты (ибо браузер тоже должен как-то его обработать).
Где взять интерпретатор ? Mozilla Firefox - опенсорсовый проект, и там например есть постоянно обновляемый интерпретатор JS.
Новые способы - это всегда интересно, однако капча остаётся самым простым и самым защищённым способом.
hackconnect
17.04.2008, 22:28
а если есть жс, дополнить ее тем что я сказал выше - тоже поможет.
Это антиспам, но не антифлуд. Антиспам реализуется довольно просто в любом случае, потому что спам-боты сейчас весьма неинтеллектуальны - им интеллектуальность скорее вредна чем полезна. Но против целенаправленного флуда вашей формы такие способы не никак спасут =(
sboy20042
18.04.2008, 17:04
Isis если бы почтовики юзали такой способ, то в ящиках у людей по тыще в день спама было бы и я был бы вторым биллом гейтсом
sboy20042
18.04.2008, 17:04
2 Dword
много не знаешь просто
2 Dword
много не знаешь просто
Поверь, он на много больше тебя знает.
sboy20042
18.04.2008, 17:23
NOmeR1
его реплика про ботов говорит об незнании именно этих вопросов))
а то что он знает там в тысячи раз больше меня не колышит
Isis если бы почтовики юзали такой способ, то в ящиках у людей по тыще в день спама было бы и я был бы вторым биллом гейтсом
Какая связь между спамом почтовых ящиков и темой статьи, где речь идет о спаме форм?
2 Dword
много не знаешь просто
Это для меня не откровение, какое однако имеет отношение к разговору?
=sboy20042NOmeR1
его реплика про ботов говорит об незнании именно этих вопросов))
а то что он знает там в тысячи раз больше меня не колышит
Спамом естественно я не занимаюсь - оставим это моральным уродам - дело с ним, однако, имею видимо благодаря таким умельцам как sboy20042.
Поверь, он на много больше тебя знает.
Для него не важно кто сколько знает, ему важнее написать какую-нибудь гадость в адрес того, кто не пользуется популярностью на форуме. От того что ему это по нраву он и занимается спамом, любой спамер - человек бессовестный и нахальный.
sboy20042
18.04.2008, 17:35
Dword привиди пример того что я нахальный и всем гадости пишу
Я тебе гадости не написал, я просто сказал что ты не знаешь если говоришь что спам боты неинтеллектуальны
А насчет спама, мне это не нравится, просто в этом есть деньги)
прошу принять админов во внимание тот факт что меня оскорбили назвав моральным уродом
Прямых оскорблений не было а во внимание меня уже и без ваших советов принимали слишком часто. Что касается моей осведомленности об интеллектуальности спам ботов, возможно у нас разные единицы измерения их способностей и то что для вас выглядит очень замысловатым, мне таким не представляется?
sboy20042
18.04.2008, 23:07
Dword по твоему распределенное распознавание неэлементарной капчи основанное на нейронных сетях это неинтеллектуально? Учитывая то что само название "нейронная сеть" подрузамевает самообучаемость
Dword по твоему распределенное распознавание неэлементарной капчи основанное на нейронных сетях это неинтеллектуально? Учитывая то что само название "нейронная сеть" подрузамевает самообучаемость
Есть некоторые боты которые работают с алгоритмами распознавания "капчи" (не важно по какому принципу они работают - на нейронных сетях не видел), только вот умности ботам это не добавляет, потому что чуть "капча" другая или другая форма они уже не понимают что надо делать и сдаются в лучшем случае, а то и шлют мусорные запросы.
Вот к чему этот разговор, скажите? Вы говорите что занимаетесь спамом (и мне не кажется что это маловероятно, или необычно), а говорите здесь какую-то нелогичную хренотень, зачем - как вообще это понимать? Странно как-то это и нелепо...
sboy20042
19.04.2008, 00:56
Есть некоторые боты которые работают с алгоритмами распознавания "капчи" (не важно по какому принципу они работают - на нейронных сетях не видел), только вот умности ботам это не добавляет, потому что чуть "капча" другая или другая форма они уже не понимают что надо делать и сдаются в лучшем случае, а то и шлют мусорные запросы.
еще раз повторюсь, "нейронная сеть" и "самообучаемость"
улавливаешь?
еще раз повторюсь, "нейронная сеть" и "самообучаемость"
улавливаешь?
Мммм.... Да, я как-то сразу не понял: "нейронная сеть" и "самообучаемость" это наводит на определенные мысли согласен...
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot