SECISSUE fix #952 로그인 사용자의 session id를 재발급하도록 개선

- 로그인 후, admin 액션 접근 시 session id 재발급
This commit is contained in:
bnu 2014-09-04 14:52:37 +09:00
parent 56567bba9e
commit 59960c3b08
4 changed files with 62 additions and 0 deletions

View file

@ -377,6 +377,22 @@ class ModuleHandler extends Handler
$kind = 'admin';
}
if($kind == 'admin')
{
$oMemberController = ModuleHandler::getModuleInstance('member', 'controller');
$validate_session = $oMemberController->validateSession();
$oMemberController->regenerateSession();
if(!$validate_session)
{
$this->error = 'security_invalid_session';
$oMessageObject = ModuleHandler::getModuleInstance('message', 'view');
$oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage();
return $oMessageObject;
}
}
// check REQUEST_METHOD in controller
if($type == 'controller')
{

View file

@ -3717,6 +3717,19 @@
<value xml:lang="mn"><![CDATA[%s-ын хэлбэр буруу байна. Зөвхөн тоогоор оруулах ёстой.]]></value>
</item>
</item>
<item name="security_invalid_session">
<value xml:lang="ko"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="en"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="jp"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="zh-CN"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="zh-TW"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="fr"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="de"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="es"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="tr"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="vi"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
<value xml:lang="mn"><![CDATA[바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.]]></value>
</item>
<item name="security_warning_embed">
<value xml:lang="ko"><![CDATA[보안 문제로 관리자 아이디로는 embed를 볼 수 없습니다. 확인하려면 다른 아이디로 접속하세요]]></value>
<value xml:lang="en"><![CDATA[Due to security concern, administrators are not allowed to view embedded items.<BR /> To view them, please use another non-administrator ID.]]></value>

View file

@ -1809,6 +1809,8 @@ class memberController extends member
}
}
$_SESSION['session_checkup'] = null;
$this->regenerateSession();
$this->setSessionInfo();
return $output;
@ -1868,6 +1870,31 @@ class memberController extends member
$this->addMemberMenu( 'dispMemberOwnDocument', 'cmd_view_own_document');
}
function validateSession()
{
$destory_session = false;
if($_SESSION['ipaddress'] != $_SERVER['REMOTE_ADDR']) $destory_session = true;
if($destory_session)
{
$this->destroySessionInfo();
return false;
}
return true;
}
function regenerateSession()
{
if(!$_SESSION['session_checkup'] || time() - $_SESSION['session_checkup'] > 30)
{
session_regenerate_id(true);
$_SESSION['session_checkup'] = time();
}
}
/**
* Logged method for providing a personalized menu
* Login information is used in the output widget, or personalized page

View file

@ -234,6 +234,12 @@ class memberModel extends member
}
Context::set('logged_info', $logged_info);
if($logged_info->is_admin == 'Y' || $logged_info->is_site_admin)
{
$oMemberController = getController('member');
$oMemberController->regenerateSession();
}
return $logged_info;
}
return NULL;