Re: Autologin!

Posted by Andrey_Ra on 2003/6/14 2:47:12
Этот и другие хаки доступны для скачивания тут: Несколько полезных хаков

Вот тут покурочил немного ксупс. И приляпал автологин:
Xoops 2.0RC3(читать примечание ко 2-му шагу), 2.0.2, 2.0.3

1. include\common.php: У меня строка 124, после строчки // ############## Login a user with a valid session ##############:
Quote:

//Begin: Autologin hack
if ((empty($HTTP_SESSION_VARS['xoopsUserId'])) && (!empty($HTTP_COOKIE_VARS['al_pass'])&&(!empty($HTTP_COOKIE_VARS['al_uid'])))) {
$al_uid=$HTTP_COOKIE_VARS['al_uid'];
$pass=trim($HTTP_COOKIE_VARS['al_pass']);
$member_handler =& xoops_gethandler('member');
$user =& $member_handler->getUser($al_uid);
if (is_object($user)) {
$uname= $user->getVar('uname');
} else {
unset($uname);
};
unset($user);
$myts =& MyTextsanitizer::getInstance();
$user =& $member_handler->loginUser(addslashes($myts->stripSlashesGPC($uname)), addslashes($myts->stripSlashesGPC($pass)),true);
if ($user != false){
setcookie('al_pass', $pass, time()+86400*100,'/','',0);
setcookie('al_uid',$user->uid(),time()+86400*100,'/','',0);
$user->setVar('last_login', time());
if (session_id()==''){session_destroy(); session_start();};
$HTTP_SESSION_VARS = array();
$HTTP_SESSION_VARS['xoopsUserId'] = $user->getVar('uid');
$HTTP_SESSION_VARS['xoopsUserGroups'] = $user->getGroups();
if ($xoopsConfig['use_mysession'] && $xoopsConfig['session_name'] != '') {
setcookie($xoopsConfig['session_name'], session_id(), time()+$xoopsConfig['session_expire'], '/', '', 0);
$HTTP_COOKIE_VARS[$xoopsConfig['session_name']]=session_id();
}
$user_theme = $user->getVar('theme');
if (in_array($user_theme, $xoopsConfig['theme_set_allowed'])) {
$HTTP_SESSION_VARS['xoopsUserTheme'] = $user_theme;
}

};
};
//End: Autologin Hack


2. kernel\member.php: У меня строчка 320, пара строк в функции &loginUser (проще привести ее всю):
Quote:

//Begin: Autologin hack
function &loginUser($uname, $pwd, $al_login = false)
{
$criteria = new CriteriaCompo(new Criteria('uname', $uname));
if (!$al_login){$mypwd=md5($pwd);} else {$mypwd=$pwd;};
$criteria->add(new Criteria('pass', $mypwd));
$user =& $this->_uHandler->getObjects($criteria, false);
if (!$user || count($user) != 1) {
return false;
}
return $user[0];
}
//End: Autologin hack


Для версии 2.0RC3:
Quote:

//Begin: Autologin hack
function &loginUser($uname, $pwd, $al_login = false)
{
$criteria = new CriteriaCompo(new Criteria('uname', $uname));
$criteria->add(new Criteria('pass', $pwd));
$user =& $this->_uHandler->getObjects($criteria, false);
if (!$user || count($user) != 1) {
return false;
}
return $user[0];
}
//End: Autologin hack


3. include\checklogin.php строка 46, сразу после условия if (false != $user) {:
Quote:

//Begin: Autologin hack
if (!empty($HTTP_POST_VARS['union_al'])&&($HTTP_POST_VARS['union_al']=='Yes')){
setcookie('al_pass', md5($pass), time()+86400*100,'/','',0);
setcookie('al_uid',$user->uid(),time()+86400*100,'/','',0);
};
//End: Autologin hack


4. /user.php, строка 73, под строчкой session_destroy();:
Quote:

//Begin: Autologin hack
setcookie('al_pass', '', time()-33600,'/','',0);
setcookie('al_uname', '', time()-33600,'/','',0);
setcookie('al_uid', '', time()-3600,'/','',0);
//End: Autologin hack


5. Идем в администрирование порталом, и правим тему оформления->Система->system_block_login.html, добавляем там в любом месте по вкусу подобную запись:
Quote:

<input type="checkbox" name="union_al" value="Yes">Запомнить пароль<br>


вот собственно и все.

Логин-пароль хрянятся в куках 100 дней после последнего посещения. Если хотите больше - все цифры '100' в данном хаке поменяйте на сколько вам нужно.

Недостаток такого подхода - можно заниматься перебором паролей. Т.е. перебором хэшей от распространенных паролей.
При желании можно доработать привязку ip, (путем скливания ip с секретным словом и хранения md5-хэша в качестве дополнительного параметра) - но в таком случае автологином не смогут пользоваться диалапщики.

Насчет пароля в куках - он там хэшированным в любом случае будет, т.е. по сути это только контрольная сумма пароля.

Исправлено 22-07-03, 15:10
После прений на xoops.org al_uname был заменен на al_uid со всеми вытекающими дописками в коде.

This Post was from: https://xoops.ru/modules/newbb/viewtopic.php?post_id=4152