@Narts

Правильно ли я сделал идентификацию для гостей?

Всем привет!
Разрабатываю сайт на одном микрофреймворке.

Там такая концепция, что если юзер не залогинен, то ему недоступен сайт (постоянно редирект на страницу с логином).
Это не совсем подходит под задачи моего сайта, и я сделал следующее:

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 процентов, и переносить на другой фреймворк времени нету.

Заранее всем спасибо за ответы и за наводки
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы