Всем привет!
Разрабатываю сайт на
одном микрофреймворке.
Там такая концепция, что если юзер не залогинен, то ему недоступен сайт (постоянно редирект на страницу с логином).
Это не совсем подходит под задачи моего сайта, и я сделал следующее:
1. Изменил обработку попытки неавторизованного доступа (
исходник , 47 строка). Изменил на:
public function unauthenticated(){
$this->controller->login->logOut(Session::getUserId());
if($this->request->isAjax()) {
return $this->controller->error(401);
}else{
Session::reset(["guest_mode" => true]);
}
}
2. Далее в сессии изменил "суть" ее генерации (
исходник, строка 300). Изменил на:
public static function reset($data){
if($data["guest_mode"]){
$_SESSION["is_logged_in"] = true;
$_SESSION["user_id"] = 0;
$_SESSION["role"] = "guest";
$_SESSION["username"] = "0";
}else{
// remove old and regenerate session ID.
session_regenerate_id(true);
$_SESSION = array();
$_SESSION["is_logged_in"] = true;
$_SESSION["user_id"] = (int)$data["user_id"];
$_SESSION["role"] = $data["role"];
$_SESSION["username"] = $data["username"];
// save these values in the session,
// they are needed to avoid session hijacking and fixation
$_SESSION['ip'] = $data["ip"];
$_SESSION['user_agent'] = $data["user_agent"];
$_SESSION['generated_time'] = time();
// update session id in database
self::updateSessionId($data["user_id"], session_id());
// set session cookie setting manually,
// Why? because you need to explicitly set session expiry, path, domain, secure, and HTTP.
// @see https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet#Cookies
setcookie(session_name(), session_id(), time() + Config::get('SESSION_COOKIE_EXPIRY') /*a week*/, Config::get('COOKIE_PATH'), Config::get('COOKIE_DOMAIN'), Config::get('COOKIE_SECURE'), Config::get('COOKIE_HTTP'));
}
}
Ну и во всех, местах где выводится инфа о пользователе (мини-профили и т.д.) поставил условие: если user_id = 0, то отображаем кнопку логина.
Прошу подскакать, безопасны ли мои эти изменения?
Я не прошу за меня сделать всю работу, я лишь хочу чтобы при релизе сайта не возникло никаких проблем с группами пользователей.
Так же прошу не советовать переписывать сайт на другом фреймворке, а-ля лара и т.д. Сайт написан уже на 80-90 процентов, и переносить на другой фреймворк времени нету.
Заранее всем спасибо за ответы и за наводки