ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Альтернатива капчи
  #1  
Старый 16.06.2008, 15:32
Аватар для nc.STRIEM
nc.STRIEM
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме:
3493315

Репутация: 1228


Отправить сообщение для nc.STRIEM с помощью ICQ
По умолчанию Альтернатива капчи

[вступление]
Сейчас при стремительном развитие Интернета очень остро стоит проблема спама/флуда итд, в результате этого даже на самых задрыпаных гостевых книгах, формах связь с администрацией стоят капчи, что в большинстве случаев очень напрягает угадывать что же там написано.

[идея]
В форме создаем поле типа hidden, в нем будет храниться наш ключ, но присваиваться он будет не на прямую, а через Java Script.
По шагам:
1 - Создаем скрытое поле
2 - генерируем средствами php ключ
3 - генерируем средствами php JS который будет присваивать значение нашего ключа скрытому полю
4 - проводим обфускацию JS кода

Скриптов по обфускации JS довольно таки много, поэтому остается написать только генерацию кода и ключа

Генерация
js_gen.php
PHP код:
<?
    
function gen_js_key()
    {

        
$VAR_NAME '';
        
$VAR_ELNAME genstr(38);
        
$VAR_KEY md5($_SERVER['REMOTE_ADDR'].rand(1000099999));
        
$RET = array();
        
$RET['js_key']  = $VAR_KEY;
        
        
$zn 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM';
        for(
$i rand(18); $i >0$i--)
            
$VAR_NAME.= $zn[rand(0strlen($zn)-1)];
        
        
$RET['input'] = '<input type="hidden" id="'.$VAR_ELNAME.'" name="js_key">';
        
        
$J1 f_substr($VAR_KEY$VAR_NAME);
        
$J2 f_url($VAR_KEY$VAR_NAME);
        
        
$JAVA 'var '.$VAR_NAME.' = "'.$VAR_KEY.'"; ';
        
$JAVA.= $J2.$J1;
        
$JAVA.= 'window.document.getElementById(\''.$VAR_ELNAME'\').value = '.$VAR_NAME.'; ';    
        include(
'packer/class.JavaScriptPacker.php');
        for(
$i rand(15); $i >= 0$i--)
        {
            
$packer = new JavaScriptPacker($JAVA'Normal'truefalse);
            
$JAVA $packer->pack();
        }
        
        
$RET['js'] = $JAVA;
        return 
$RET;
    }
    
    function 
genstr($len$max 0)
    {
        if(!
$max)
            return 
substr(md5(rand(1000099999)), 0$len);
        return 
substr(md5(rand(1000099999)), 0rand($len$max));
    }

    function 
f_substr(&$s$var)
    {
        
$i rand(110);
        
$java $var.' = '.$var.'.substr('.$i.', '.strlen($s)."); \n";
        
$a genstr($i);
        
$s $a.$s.genstr(010);
        return 
$java;
    }
    
    function 
f_url(&$s$var)
    {    
        
$java $var.' = decodeURIComponent('.$var."); \n";
        
$a genstr($i);
        
$s preg_replace('/(.)/e''sprintf("%%%x", ord("$1"))'$s);
        return 
$java;
    }
?>
class.JavaScriptPacker.php – какой-то класс который я нашел в нете для обфускации JS

пример использования
PHP код:
<? 
    session_start
(); 

    if(!empty(
$_POST['js_key']))
    {
        if(
$_SESSION['js_key'] == $_POST['js_key'])
        {
            
$_SESSION['js_key'] = '';
            echo 
'вы ввели '.$_POST['txt'].'<br>';
        }
        else
            echo 
'какаято х..ня<br>';
    }
    
    include(
'js_gen.php');
    
$r gen_js_key();
    
    echo 
'<form method=post><input type=text name=txt>';
    echo 
$r['input'];
    
    
$_SESSION['js_key'] = $r['js_key'];
?>
<input type=submit name=knopka>
</form>
<script type="text/javascript">
<?=$r['js']?>
</script>
В данном примере не учтен случай когда JS отключен, а его нужно учитывать.
Делаем проверку включен ли JS, если да то выводим данный код защиты, если нет то используем капчу, но это уже сами

[заключение]
Данный способ значительно облегчает жизнь пользователя, но использовать его можно далеко не везде. Для крупных проектов он не подходит, т.к можно написать “выполнение” JS и определение ключа, конечно прийдеться немного зморочеться, но в дальнейшем это оправдаеться. Зато для гостевых книг, форм обратной связи такая штука отлично подходит)

Скачать: http://taran.su/16-javascript-captcha.html

Последний раз редактировалось nc.STRIEM; 03.03.2009 в 18:30..
 
Ответить с цитированием

  #2  
Старый 16.06.2008, 15:35
Аватар для DoDo
DoDo
Banned
Регистрация: 12.06.2008
Сообщений: 58
Провел на форуме:
105196

Репутация: 35
По умолчанию

1)Сможет ли декодер от Нерезуса обойти эту обфускацию?
2)Изос показывал чето подобное на jQuery
3)Молодчик+++
 
Ответить с цитированием

  #3  
Старый 16.06.2008, 15:41
Аватар для nc.STRIEM
nc.STRIEM
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме:
3493315

Репутация: 1228


Отправить сообщение для nc.STRIEM с помощью ICQ
По умолчанию

Цитата:
Сообщение от DoDo  
1)Сможет ли декодер от Нерезуса обойти эту обфускацию?
2)Изос показывал чето подобное на jQuery
3)Молодчик+++
да сможет, об этом то и речь, но это не средствами php и не так уж просто, но возможно)
 
Ответить с цитированием

  #4  
Старый 16.06.2008, 18:41
Аватар для mr.The
mr.The
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме:
4778940

Репутация: 1257


Отправить сообщение для mr.The с помощью ICQ
По умолчанию

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

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

Последний раз редактировалось mr.The; 16.06.2008 в 18:43..
 
Ответить с цитированием

  #5  
Старый 16.06.2008, 18:51
Аватар для Piflit
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

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

ЗЫ хорошая идея
 
Ответить с цитированием

  #6  
Старый 19.06.2008, 10:29
Аватар для nc.STRIEM
nc.STRIEM
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме:
3493315

Репутация: 1228


Отправить сообщение для nc.STRIEM с помощью ICQ
По умолчанию

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зароботок на распознавании Капчи -=lebed=- О Работе 19 22.06.2008 09:32
Черновая версия распознавателя капчи mail.ru desTiny Уязвимости 2 09.06.2008 23:58
Альтернатива настроек подключения аськи? ArmageddonPro АнтиАдмин 4 29.04.2008 16:28
Декодирование капчи 4nob1oz Авторские статьи 22 17.04.2008 17:32
Варианты обхода простой капчи? -=lebed=- PHP, PERL, MySQL, JavaScript 7 23.12.2007 03:11



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ