Changeset 3448


Ignore:
Timestamp:
11/03/10 08:21:13 (13 years ago)
Author:
rafaelraymundo
Message:

Ticket #990 - Vulnerabilidades no Anti robo Captcha do Login

Location:
branches/2.2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2/login.php

    r3447 r3448  
    9999                $GLOBALS['phpgw']->session->phpgw_setcookie('serverID', $GLOBALS['phpgw_info']['server']['use_frontend_id']); 
    100100        } 
    101  
    102 if( $GLOBALS[ 'phpgw_info' ][ 'server' ][ 'captcha' ] == 1 ) 
    103 { 
    104         $key_convert = md5_file( dirname( __FILE__ ) . '/header.inc.php' ); 
    105         if ( ! $key_convert ) 
    106         { 
    107                 echo '<b>' . lang( 'Error in access. Please, alert the Administrator.' ) . '</b>'; 
    108                 exit; 
    109         } 
    110         session_name('ZABX'); 
    111         if($_COOKIE['ZABX'] && $key_convert) 
    112         { 
    113                 $aux = session_convert(base64_decode($_COOKIE['ZABX']),$key_convert); 
    114                 if(substr($aux,0,32) == $key_convert) 
    115                 { 
    116                         session_id(substr($aux,32)); 
    117                 } 
    118                 else 
    119                 { 
    120                         $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/login.php','cd=5')); 
    121                 } 
    122         } 
    123         session_start(); 
    124 } 
    125  
     101if($GLOBALS['phpgw_info']['server']['captcha']==1) 
     102  { 
     103     session_start(); 
     104  } 
    126105include(personalize_include_path('phpgwapi','login')); 
    127106?> 
  • branches/2.2/phpgwapi/templates/default/login_default.php

    r3444 r3448  
    3737                                return '<font color="FF0000">' . lang('Blocked, too many attempts(%1)! Retry in %2 minute(s)',$GLOBALS['phpgw_info']['server']['num_unsuccessful_id'],$GLOBALS['phpgw_info']['server']['block_time']) . '</font>'; 
    3838                        case 200: 
    39                                 return '<font color="FF0000">' . lang('Invalid code') . '</font>'; 
    40                         break;                           
     39                            //return '<font color="FF0000">' . lang('Invalid code') . '</font>'; 
     40                            return '<font color="FF0000">' . lang('Bad login or password') . '</font>'; 
     41                            break; 
    4142                        case 10: 
    4243                                $GLOBALS['phpgw']->session->phpgw_setcookie('sessionid'); 
     
    5354                                 
    5455                        default: 
    55                                 return '&nbsp;'; 
     56                                return ''; 
    5657                } 
    5758        } 
     
    116117            if($GLOBALS['phpgw_info']['server']['captcha']==1) 
    117118              { 
    118                 if(!$_COOKIE['ZABX']) 
    119                     { 
    120                         $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/login.php','cd=5')); 
    121                     } 
    122119                if($_SESSION['contador'] > $GLOBALS['phpgw_info']['server']['num_badlogin']) 
    123120                    { 
    124121                        if ($_SESSION['CAPTCHAString'] != trim(strtoupper($_POST['codigo']))) 
    125122                                { 
    126                                         $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/login.php','cd=200')); 
     123                                        if(!$_GET['cd']) 
     124                                        { 
     125                                            $_GET['cd'] = '200'; 
     126                                        } 
    127127                                } 
    128128                        unset($_SESSION['CAPTCHAString']); 
     
    148148                        !isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['SSL_CLIENT_S_DN'])) 
    149149                { 
    150                         $GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/login.php','cd=5')); 
     150                        if(!$_GET['cd']) 
     151                            { 
     152                                $_GET['cd'] = '5'; 
     153                            } 
    151154                } 
    152155                 
     
    165168                        $login .= '@'.$GLOBALS['phpgw_info']['server']['default_domain']; 
    166169                } 
     170                If(!$_GET['cd']) 
    167171                $GLOBALS['sessionid'] = $GLOBALS['phpgw']->session->create(strtolower($login),$passwd,$passwd_type,'u'); 
    168172 
    169173                if(!isset($GLOBALS['sessionid']) || ! $GLOBALS['sessionid']) 
    170174                { 
    171                         $GLOBALS['phpgw']->redirect($GLOBALS['phpgw_info']['server']['webserver_url'] . '/login.php?cd=' . $GLOBALS['phpgw']->session->cd_reason); 
     175 
     176                       If(!$_GET['cd']) $_GET['cd'] = $GLOBALS['phpgw']->session->cd_reason; 
    172177                } 
    173178                else 
     
    204209                } 
    205210        } 
    206         else 
    207         { 
     211        //else   // ================================================================================= 
     212        //{ 
    208213            $valor_contador = $_SESSION['contador']; 
    209214            $valor_contador = $valor_contador + 1; 
     
    254259                        $tmpl->set_var('lang_message',stripslashes(lang('loginscreen_message'))); 
    255260                } 
    256         } 
     261        //} 
    257262 
    258263        if($GLOBALS['phpgw_info']['server']['use_prefix_organization']) 
     
    413418 
    414419        $tmpl->set_var('autocomplete', ($GLOBALS['phpgw_info']['server']['autocomplete_login'] ? 'autocomplete="off"' : '')); 
    415  
    416420// soh mostra o captcha se for login sem certificado.... 
    417421if($GLOBALS['phpgw_info']['server']['captcha'] && $_GET['cd']!='300' ) 
    418422    { 
    419         $aux_captcha = ''; 
    420         setcookie(session_name(),base64_encode(session_convert($key_convert . session_id(),$key_convert)),0); 
     423        $aux_captcha = '<input type="hidden" name="' . session_name() . '"  value="' . session_id() . '" >'; 
     424//        setcookie(session_name(),base64_encode(session_convert($key_convert . session_id(),$key_convert)),0); 
    421425        if($valor_contador > $GLOBALS['phpgw_info']['server']['num_badlogin']) 
    422426            { 
    423427                $aux_captcha = '<div class="login_label" > 
    424                    <img src="./security/captcha.php" title="'.lang('Security code').'" alt="'.lang('Security code').'" style="position:static;"><br/> 
     428                   <img src="./security/captcha.php?' . session_name() . '=' . session_id() . '" title="'.lang('Security code').'" alt="'.lang('Security code').'" style="position:static;"><br/> 
    425429                   <input class="input" type="text" maxlength="50" size="20" name="codigo" id="codigo" value="" > 
     430                   <input type="hidden" name="' . session_name() . '"  value="' . session_id() . '" > 
    426431                   </div>'; 
    427                 $tmpl->set_var('captcha',$aux_captcha); 
    428432            } 
    429433    } 
    430      
     434    $tmpl->set_var('captcha',$aux_captcha); 
    431435// Testa se deve incluir applet para login com certificado...... 
    432436if ($_GET['cd']=='300' && $GLOBALS['phpgw_info']['server']['certificado']==1) 
  • branches/2.2/security/captcha.php

    r3447 r3448  
    148148  
    149149 // ************  Fim da Classe  ************************* 
    150  
    151 function session_convert($str,$ky='') 
    152 { 
    153         if($ky=='') return $str; 
    154         $ky=str_replace(chr(32),'',$ky); 
    155         if(strlen($ky)<8) return ''; 
    156         $kl=strlen($ky)<32?strlen($ky):32; 
    157         $k=array(); 
    158         for($i=0;$i<$kl;$i++) 
    159         { 
    160                 $k[$i]=ord($ky{$i})&0x1F; 
    161         } 
    162         $j=0; 
    163         for($i=0;$i<strlen($str);$i++) 
    164         { 
    165                 $e=ord($str{$i}); 
    166                 $str{$i}=$e&0xE0?chr($e^$k[$j]):chr($e); 
    167                 $j++;$j=$j==$kl?0:$j; 
    168         } 
    169         return $str; 
    170 } 
    171  
    172 $key_convert = md5_file( realpath( dirname( __FILE__ ) . '/../header.inc.php' ) ); 
    173  
    174 //Cria o CAPTCHA,  gera o string e a imagem ... 
    175 $GLOBALS['captcha'] = new captcha; 
    176  
    177 // Guarda o string do captcha na session... 
    178 session_name( 'ZABX' ); 
    179 session_id( substr( session_convert( base64_decode( $_REQUEST['ZABX'] ), $key_convert ), 32 ) ); 
    180 session_start( ); 
    181 $_SESSION[ 'CAPTCHAString' ] = $GLOBALS[ 'captcha' ] -> GetCaptchaString( ); 
    182  
    183 // Vai exibir a imagem do captcha... 
    184 $GLOBALS['captcha'] ->Showcaptcha(); 
     150  //Cria o CAPTCHA,  gera o string e a imagem ... 
     151  $GLOBALS['captcha'] = new captcha; 
     152  // Guarda o string do captcha na session... 
     153  session_name('sessionid'); 
     154  session_start(); 
     155  $_SESSION['CAPTCHAString'] = $GLOBALS['captcha'] ->GetCaptchaString(); 
     156  // Vai exibir a imagem do captcha... 
     157  $GLOBALS['captcha'] ->Showcaptcha(); 
    185158?> 
Note: See TracChangeset for help on using the changeset viewer.