OSOL Captcha на защите страницы "ЗАДАТЬ ВОПРОС ПО ТОВАРУ" (VirtueMart 1.1.4 и возможно выше)

Тема в разделе "Хаки и модификации", создана пользователем woojin, 14.01.2012.

  1. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    Недавно попросили сделать защиту этой страницы капчей, а то мол спам задолбал, согласен, спам долбает всех!!!

    ну и чтобы не мудрствовать лукаво, взял OSOL Captcha и прикрутил её вот таким образом:
    1. идём сюда: components\com_virtuemart\themes\default\templates\pages\shop.ask.tpl.php
    2. забираем или коментируем (как сделал я) строку №37
    Код (html):
    1. <input type="button" name="send" value="<?php echo $VM_LANG->_('SEND_BUTTON') ?>" class="button" onclick="validateEnquiryForm()" />

    3. вставляем вот такой код:
    Код (PHP):
    1. <?php
    2.     global $mainframe;
    3.     //set the argument below to true if you need to show vertically( 3 cells one below the other)
    4.     $mainframe->triggerEvent('onShowOSOLCaptcha', array(true));
    5. ?>
    между строками №49 и №50
    4. вставляем строку из п.2 между:
    Код (PHP):
    1. $mainframe->triggerEvent('onShowOSOLCaptcha', array(true));
    и
    Код (PHP):
    1. ?>

    5. удаляем, за ненадобностью, строку №58:
    Код (CODE):
    1. document.emailForm.submit();

    кнопка вынесена из формы из-за того что если её оставить на месте, то после её нажатия данные не передаются вообще!!!!

    (далее идёт чисто моя разработка для проверки правильности введённой капчи)


    6. на её место ставим такой вот код:
    Код (PHP):
    1. <?php echo 'cv'.$GLOBALS['totalCaptchas'].'('.$GLOBALS['totalCaptchas'].', document.emailForm);'."\n"; ?>

    7. идём сюда: plugins\system\osolcaptcha.php
    8. ищем строку примерно №553:
    Код (PHP):
    1. function GetCapthcaHTML($vertical = false)

    9. перед ней вставляем вот такую функцию:
    Код (PHP):
    1. function f_rnd(){
    2.                     // Символы, которые будут использоваться в пароле.
    3.                     $chars="qazxswedcvfrtgbnhyujmkiolpQAZXSWEDCVFRTGBNHYUJMKIOLP";
    4.                     $digits="1234567890";
    5.                     // Определяем количество символов в $chars
    6.                     $size=strlen($chars)-1+strlen($digits)-1;
    7.                     // Количество символов в пароле.
    8.                     $max=0;
    9.                     while (!$max || $max<2){
    10.                         $max=rand(0, $size);
    11.                     }
    12.                     // Количество буквенных символов и цифровых
    13.                     $char=strlen($chars)-1;
    14.                     $dig=strlen($digits)-1;
    15.                     // Определяем пустую переменную, в которую и будем записывать символы.
    16.                     $password=null;
    17.                     // Создаём пароль.
    18.                     $ch=0;
    19.                     $dg=0;
    20.                     while($max--) {
    21.                         while (!$ch || !$dg){
    22.                             $ch=rand(0,$char);
    23.                             $dg=rand(0,$dig);
    24.                         }
    25.                         $password.=$chars[$ch];
    26.                         $password.=$digits[$dg];
    27.                         $ch=0;
    28.                         $dg=0;
    29.                     }
    30.                         //$password.=$chars[rand(0,$size)];
    31.                     return $password;
    32.                 }
    (заказчик попросил чтобы JS, который будет вставлен ниже, был как можно хреново читаемей)
    10. теперь учитывая все вставки идём к строке №602:
    Код (PHP):
    1. return ("

    11. перед ней вставляем такой код:
    Код (PHP):
    1. $func_rnd=true;
    2.                         $frnd=$func_rnd?$this->f_rnd():'f_rnd';
    3.                         $chars=$func_rnd?$this->f_rnd():'chars';
    4.                         $size=$func_rnd?$this->f_rnd():'size';
    5.                         $max=$func_rnd?$this->f_rnd():'max';
    6.                         $password=$func_rnd?$this->f_rnd():'password';
    7.                         $getXmlHttp=$func_rnd?$this->f_rnd():'getXmlHttp';
    8.                         $xmlhttp=$func_rnd?$this->f_rnd():'xmlhttp';
    9.                         $e=$func_rnd?$this->f_rnd():'e';
    10.                         $ee=$func_rnd?$this->f_rnd():'EE';
    11.                         $statusElem=$func_rnd?$this->f_rnd():'statusElem';
    12.                         $dbgElem=$func_rnd?$this->f_rnd():'dbgElem';
    13.                         $req=$func_rnd?$this->f_rnd():'req';
    14.                         $osolCatchaTxt=$func_rnd?$this->f_rnd():'osolCatchaTxt';
    15.                         $reloadCaptcha=$func_rnd?$this->f_rnd():'reloadCaptcha';
    16.                         $instanceNo=$func_rnd?$this->f_rnd():'instanceNo';
    17.                         $captchaSrc=$func_rnd?$this->f_rnd():'captchaSrc';
    18.                         $async=$func_rnd?$this->f_rnd():'async';
    19.                         $readyState=$func_rnd?$this->f_rnd():'readyState';
    20.                         $status=$func_rnd?$this->f_rnd():'status';
    21.                         $responseText=$func_rnd?$this->f_rnd():'responseText';
    22.                         $emailForm=$func_rnd?$this->f_rnd():'emailForm';
    ($func_rnd принимает два значения true и false, сделано для кодирования переменных в JS)
    12. далее ищем функцию написаную на JS "function reloadCapthcha{$GLOBALS['totalCaptchas']}(instanceNo)" и полностью её заменяем вот таким кодом:
    Код (PHP):
    1. function ".$reloadCaptcha."{$GLOBALS['totalCaptchas']}(".$instanceNo.")
    2.             {
    3.                 var ".$captchaSrc."=\"".JURI::base()."index.php?showCaptcha=True&instanceNo=\"+".$instanceNo."+\"&time=\"+new Date().getTime();
    4.                 //alert(".$captchaSrc.");
    5.                 //alert(document.getElementById('captchaCode'+".$instanceNo."));
    6.                 document.getElementById('captchaCode'+".$instanceNo.").src = ".$captchaSrc.";
    7.                 //alert(document.getElementById('captchaCode'+".$instanceNo.").src);
    8.             }
    9.        function ".$getXmlHttp."(){
    10.            var ".$xmlhttp.";
    11.            try {
    12.                ".$xmlhttp."=new ActiveXObject(\"Msxml2.XMLHTTP\");
    13.            } catch (".$e.") {
    14.                try {
    15.                    ".$xmlhttp."=new ActiveXObject(\"Microsoft.XMLHTTP\");
    16.                } catch (".$ee.") {
    17.                    ".$xmlhttp."=false;
    18.                }
    19.            }
    20.            if (!".$xmlhttp." && typeof XMLHttpRequest!='undefined') {
    21.                ".$xmlhttp."=new XMLHttpRequest();
    22.            }
    23.            return ".$xmlhttp.";
    24.        }
    25.        function cv{$GLOBALS['totalCaptchas']}(".$instanceNo.", ".$emailForm.")  {
    26.            var ".$statusElem."=document.getElementById('validate_status');
    27.            var ".$dbgElem."=document.getElementById('dbg');
    28.            var ".$osolCatchaTxt."=document.getElementById('osolCatchaTxt'+".$instanceNo.").value;
    29.            ".$statusElem.".innerHTML='';
    30.            ".$dbgElem.".innerHTML='';
    31.            
    32.            var ".$req."=".$getXmlHttp."();
    33.            var ".$async."=true;
    34.            ".$req.".open(\"GET\", \"".JURI::base()."plugins/system/osolCaptcha/ajax_validate.php?\"+".$frnd."()+\"=\"+".$osolCatchaTxt."+\"&\"+".$frnd."()+\"=\"+".$instanceNo.", ".$async.");
    35.            ".$req.".send(null);
    36.            //".$statusElem.".innerHTML = 'I expect a response from the server...';
    37.  
    38.            ".$req.".onreadystatechange=function() {
    39.                var ".$readyState."=".$req.".readyState;
    40.                var ".$status."=".$req.".status;
    41.                var ".$responseText."=".$req.".responseText;
    42.                if (".$readyState."==4) {
    43.                    //".$statusElem.".innerHTML=".$req.".statusText;
    44.                    if(".$status."==200) {
    45.                        if (".$responseText."=='true') {
    46.                            //".$dbgElem.".innerHTML=".$req.".responseText;
    47.                            ".$emailForm.".submit();
    48.                        } else {
    49.                            ".$dbgElem.".innerHTML=".$responseText.";
    50.                        }
    51.                    }
    52.                }
    53.            }
    54.        }
    55.        function ".$frnd."(){
    56.            var ".$chars."='qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP';
    57.            var ".$size."=".$chars.".length;
    58.            var ".$max."=0;
    59.            while (!".$max."){
    60.                ".$max."=Math.floor(Math.random()*(".$size."-0+1))+0;
    61.            }
    62.            var ".$password."='';
    63.            while(".$max."--){
    64.                ".$password."+=".$chars.".charAt(Math.floor(Math.random()*(".$size."-0+1))+0);
    65.            }
    66.            return ".$password.";
    67.        }
    (тут закоментироваными остаются только строки требовавшиеся для проверки работоспособности в процессе разработки)
    13. следующее изменение будет примерно в строке №716:
    Код (html):
    1. <a href=\"#\" onclick=\"reloadCapthcha{$GLOBALS['totalCaptchas']}(".$GLOBALS['totalCaptchas'].");return false;\" >".JText::_('REFRESH CAPTCHA')."</a>
    и заменяем её на
    Код (html):
    1. <a href=\"#\" onclick=\"".$reloadCaptcha."{$GLOBALS['totalCaptchas']}(".$GLOBALS['totalCaptchas'].");return false;\" >".JText::_('REFRESH CAPTCHA')."</a>
    тут закончили!!!!
    14. надо создать новый PHP файл тут: plugins\system\osolCaptcha\ с именем ajax_validate.php и вставить в него:
    Код (PHP):
    1. <?php
    2. define( '_JEXEC', 1 );
    3. define( 'DS', DIRECTORY_SEPARATOR );
    4. define('JPATH_BASE', str_replace('plugins'.DS.'system'.DS.'osolCaptcha', '', dirname(__FILE__)) );
    5.  
    6. require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
    7. require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');
    8.  
    9. JFactory::getApplication('site')->initialise();
    10. JFactory::getLanguage()->load('plg_system_osolcaptcha', JPATH_ADMINISTRATOR);
    11.  
    12. $currentSession = & JFactory::getSession();
    13. header('Content-Type: text/plain; charset=UTF-8');
    14. if (count($_REQUEST)<2){
    15.     echo JText::_('OSOLCAPTCHA_ERROR_MESSAGE');
    16. } else {
    17.     list($osolCatchaTxt, $instanceNo) = array_values($_REQUEST);
    18.     $securiy_code = $currentSession->get('securiy_code'.$instanceNo);
    19.     if ($osolCatchaTxt == $securiy_code && ($osolCatchaTxt!='')) {
    20.         echo 'true';
    21.     } else {
    22.         echo JText::_('OSOLCAPTCHA_ERROR_MESSAGE');
    23.     }
    24. }
    25. ?>



    вот и всё!!!!
    таким образом можно защитить страницу с задаванием вопросов по конкретному товару!!!

    P.S. а вот так выглядит не кодированный и кодированный исходный код JS
    Код (html):
    1. <script language="javascript" type="text/javascript">
    2.         //<![CDATA[
    3.     function reloadCaptcha0(instanceNo)
    4.             {
    5.                 var captchaSrc="http://boombox.ru/index.php?showCaptcha=True&instanceNo="+instanceNo+"&time="+new Date().getTime();
    6.                 //alert(captchaSrc);
    7.                 //alert(document.getElementById('captchaCode'+instanceNo));
    8.                 document.getElementById('captchaCode'+instanceNo).src = captchaSrc;
    9.                 //alert(document.getElementById('captchaCode'+instanceNo).src);
    10.             }
    11.        function getXmlHttp(){
    12.            var xmlhttp;
    13.            try {
    14.                xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    15.            } catch (e) {
    16.                try {
    17.                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    18.                } catch (EE) {
    19.                    xmlhttp=false;
    20.                }
    21.            }
    22.            if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    23.                xmlhttp=new XMLHttpRequest();
    24.            }
    25.            return xmlhttp;
    26.        }
    27.        function cv0(instanceNo, emailForm)  {
    28.            var statusElem=document.getElementById('validate_status');
    29.            var dbgElem=document.getElementById('dbg');
    30.            var osolCatchaTxt=document.getElementById('osolCatchaTxt'+instanceNo).value;
    31.            statusElem.innerHTML='';
    32.            dbgElem.innerHTML='';
    33.            
    34.            var req=getXmlHttp();
    35.            var async=true;
    36.            req.open("GET", "http://boombox.ru/plugins/system/osolCaptcha/ajax_validate.php?"+f_rnd()+"="+osolCatchaTxt+"&"+f_rnd()+"="+instanceNo, async);
    37.            req.send(null);
    38.            //statusElem.innerHTML = 'I expect a response from the server...';
    39.  
    40.            req.onreadystatechange=function() {
    41.                var readyState=req.readyState;
    42.                var status=req.status;
    43.                var responseText=req.responseText;
    44.                if (readyState==4) {
    45.                    //statusElem.innerHTML=req.statusText;
    46.                    if(status==200) {
    47.                        if (responseText=='true') {
    48.                            //dbgElem.innerHTML=req.responseText;
    49.                            emailForm.submit();
    50.                        } else {
    51.                            dbgElem.innerHTML=responseText;
    52.                        }
    53.                    }
    54.                }
    55.            }
    56.        }
    57.        function f_rnd(){
    58.            var chars='qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP';
    59.            var size=chars.length;
    60.            var max=0;
    61.            while (!max){
    62.                max=Math.floor(Math.random()*(size-0+1))+0;
    63.            }
    64.            var password='';
    65.            while(max--){
    66.                password+=chars.charAt(Math.floor(Math.random()*(size-0+1))+0);
    67.            }
    68.            return password;
    69.        }
    70.                        //]]>
    71.             </script>
    Код (html):
    1. <script language="javascript" type="text/javascript">
    2.         //<![CDATA[
    3.     function t7p6S0D9i3d4x4M2d7m4J0h0j3U8W9z3B7u3J5X0U5e60(D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2)
    4.             {
    5.                 var J0R2x5f7H3c7m7o5f9u3="http://localhost/vm_development/index.php?showCaptcha=True&instanceNo="+D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2+"&time="+new Date().getTime();
    6.                 //alert(J0R2x5f7H3c7m7o5f9u3);
    7.                 //alert(document.getElementById('captchaCode'+D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2));
    8.                 document.getElementById('captchaCode'+D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2).src = J0R2x5f7H3c7m7o5f9u3;
    9.                 //alert(document.getElementById('captchaCode'+D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2).src);
    10.             }
    11.        function G2o4l8v5x4u6u5d8C3Q3U8(){
    12.            var G8R0t2B5K0;
    13.            try {
    14.                G8R0t2B5K0=new ActiveXObject("Msxml2.XMLHTTP");
    15.            } catch (t5W5J7H3r2D4I4D5Z5c7t9u3w6k0i7s3R0Q0x2o0o0o7E7l0K6p0e0K6X4S7W4X2g7g6C8A2R0T4C3y6N9A0T5l4L4j6l7f8r9i8P2R8Q5O9) {
    16.                try {
    17.                    G8R0t2B5K0=new ActiveXObject("Microsoft.XMLHTTP");
    18.                } catch (T7Q7m0e8F2X3Q3i3k3V2b9y3O2n8Y9u3G5O5C7p3i4t9W0G0f9g5n0m3n8x3S7v6Z0Q5a8n3f9j6G7X2r9x6g7u9y6i9l0h5D7B9l2j3H0m8d3v5M6t3x7w6) {
    19.                    G8R0t2B5K0=false;
    20.                }
    21.            }
    22.            if (!G8R0t2B5K0 && typeof XMLHttpRequest!='undefined') {
    23.                G8R0t2B5K0=new XMLHttpRequest();
    24.            }
    25.            return G8R0t2B5K0;
    26.        }
    27.        function cv0(D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2, A6D4l3Y5A8P9o7M6G4B8Q9V6E9R0u6n9s0r6L8U0Z4)  {
    28.            var H2Q0p8B5e6o8c6J4T3b3A5y2W9x8v6F7h5w5v2Z9y9e9h5z0u9O3W8T0v9u2k6j6W0j0T5O9P4=document.getElementById('validate_status');
    29.            var I6W0W7X4i5Q3U8F4s3E0G2R9s6H4g8L9R6Z3K0B5g7d0z3t9L0I8b7m6m4k2L0m9K2n2H5d9C4M9d9X7w9y6=document.getElementById('dbg');
    30.            var t2z9k7o7A7v2E6E6E3s4u8I7G5K0n2w6r2j7G9r3i5X6u7K8u9h2h3z7m2v7n6m5j9U9M8K5u3e3P5e4W5A7z0H3A2B8f2r6k0J4=document.getElementById('osolCatchaTxt'+D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2).value;
    31.            H2Q0p8B5e6o8c6J4T3b3A5y2W9x8v6F7h5w5v2Z9y9e9h5z0u9O3W8T0v9u2k6j6W0j0T5O9P4.innerHTML='';
    32.            I6W0W7X4i5Q3U8F4s3E0G2R9s6H4g8L9R6Z3K0B5g7d0z3t9L0I8b7m6m4k2L0m9K2n2H5d9C4M9d9X7w9y6.innerHTML='';
    33.            
    34.            var R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2=G2o4l8v5x4u6u5d8C3Q3U8();
    35.            var s8I8f3J4w9s3J6k6m7T0x4=true;
    36.            R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.open("GET", "http://localhost/vm_development/plugins/system/osolCaptcha/ajax_validate.php?"+C8U8Q3()+"="+t2z9k7o7A7v2E6E6E3s4u8I7G5K0n2w6r2j7G9r3i5X6u7K8u9h2h3z7m2v7n6m5j9U9M8K5u3e3P5e4W5A7z0H3A2B8f2r6k0J4+"&"+C8U8Q3()+"="+D0U9H6o0U6A8S8Z3e8w7l8c5I7N0d5n8X8E5n2, s8I8f3J4w9s3J6k6m7T0x4);
    37.            R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.send(null);
    38.            //H2Q0p8B5e6o8c6J4T3b3A5y2W9x8v6F7h5w5v2Z9y9e9h5z0u9O3W8T0v9u2k6j6W0j0T5O9P4.innerHTML = 'I expect a response from the server...';
    39.  
    40.            R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.onreadystatechange=function() {
    41.                var e9P4R4Z0o4U2a9v9P4R6H3O5a0Z5p7b5Y6K3J8o4Y5y3Y3u8F4T3H3F0s6p0H4G3=R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.readyState;
    42.                var S8x6s4P2v3Q0I9R2R0w9M2Z9a0D3V3z8H2s9b3z8t0V0c5M3r6y2T9a8B7x5K2f8t3X6Z7y8G8i7z7f4N0t9Q8l5M7c2L8=R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.status;
    43.                var A4s7l8R2K0h8E4g5H7h6Y5p6M2u9v5Q7v3B2y8a7o7P8s9m5h3J9H8v2A4a8b9M7Q0b0W3C7s5b0B2f4Q8=R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.responseText;
    44.                if (e9P4R4Z0o4U2a9v9P4R6H3O5a0Z5p7b5Y6K3J8o4Y5y3Y3u8F4T3H3F0s6p0H4G3==4) {
    45.                    //H2Q0p8B5e6o8c6J4T3b3A5y2W9x8v6F7h5w5v2Z9y9e9h5z0u9O3W8T0v9u2k6j6W0j0T5O9P4.innerHTML=R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.statusText;
    46.                    if(S8x6s4P2v3Q0I9R2R0w9M2Z9a0D3V3z8H2s9b3z8t0V0c5M3r6y2T9a8B7x5K2f8t3X6Z7y8G8i7z7f4N0t9Q8l5M7c2L8==200) {
    47.                        if (A4s7l8R2K0h8E4g5H7h6Y5p6M2u9v5Q7v3B2y8a7o7P8s9m5h3J9H8v2A4a8b9M7Q0b0W3C7s5b0B2f4Q8=='true') {
    48.                            //I6W0W7X4i5Q3U8F4s3E0G2R9s6H4g8L9R6Z3K0B5g7d0z3t9L0I8b7m6m4k2L0m9K2n2H5d9C4M9d9X7w9y6.innerHTML=R9B9Y8r8D4f5w3I0o8J6u6D2K2X7a4o9s7S8x7X3x6h2.responseText;
    49.                            A6D4l3Y5A8P9o7M6G4B8Q9V6E9R0u6n9s0r6L8U0Z4.submit();
    50.                        } else {
    51.                            I6W0W7X4i5Q3U8F4s3E0G2R9s6H4g8L9R6Z3K0B5g7d0z3t9L0I8b7m6m4k2L0m9K2n2H5d9C4M9d9X7w9y6.innerHTML=A4s7l8R2K0h8E4g5H7h6Y5p6M2u9v5Q7v3B2y8a7o7P8s9m5h3J9H8v2A4a8b9M7Q0b0W3C7s5b0B2f4Q8;
    52.                        }
    53.                    }
    54.                }
    55.            }
    56.        }
    57.        function C8U8Q3(){
    58.            var b0p2F6p6T6h3o3='qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP';
    59.            var i5Z4=b0p2F6p6T6h3o3.length;
    60.            var f2F6e0A7s3c6B0e2c6o3S0l7r8V0y9J9i0w6A9p7O7N2f3y8v0N7h3=0;
    61.            while (!f2F6e0A7s3c6B0e2c6o3S0l7r8V0y9J9i0w6A9p7O7N2f3y8v0N7h3){
    62.                f2F6e0A7s3c6B0e2c6o3S0l7r8V0y9J9i0w6A9p7O7N2f3y8v0N7h3=Math.floor(Math.random()*(i5Z4-0+1))+0;
    63.            }
    64.            var d4t3L4N5f4e2I0g2v7M4S7O4H0h0u2L6y0K2i2i6g4Q6p7d4z8m2w4O2h5P8a3e6N7t0P3u0e8e2l3Q4n5l4y8G4Z8S7y4g6n3U0u3I5W5g2R6S3U0P7r6i9='';
    65.            while(f2F6e0A7s3c6B0e2c6o3S0l7r8V0y9J9i0w6A9p7O7N2f3y8v0N7h3--){
    66.                d4t3L4N5f4e2I0g2v7M4S7O4H0h0u2L6y0K2i2i6g4Q6p7d4z8m2w4O2h5P8a3e6N7t0P3u0e8e2l3Q4n5l4y8G4Z8S7y4g6n3U0u3I5W5g2R6S3U0P7r6i9+=b0p2F6p6T6h3o3.charAt(Math.floor(Math.random()*(i5Z4-0+1))+0);
    67.            }
    68.            return d4t3L4N5f4e2I0g2v7M4S7O4H0h0u2L6y0K2i2i6g4Q6p7d4z8m2w4O2h5P8a3e6N7t0P3u0e8e2l3Q4n5l4y8G4Z8S7y4g6n3U0u3I5W5g2R6S3U0P7r6i9;
    69.        }
    70.                        //]]>
    71.             </script>

    P.P.S. при каждом нажатии на кнопку ОТПРАВИТЬ ещё и меняются названия переменных передаваемых в $_GET запросе к ajax_validate.php, а при обновлении страницы ни названия функций ни названия переменных не будут похожи друг на друга!!!
     
    Последнее редактирование: 14.01.2012
  2.  
  3. Offline

    yurasan Недавно здесь

    Регистрация:
    06.01.2012
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    woojin, а для чего еще раз проверять правильность введенной капчи? Я только вставил код из 3 пункта (в самой капче этот текст тоже написан) и она вроде сама все проверяет...на локалхосте (Joomla 1.5.25, VirtueMart 1.1.9, osolCaptcha 1.0.6) у меня по крайней мере все работает...
     

Поделиться этой страницей

Загрузка...