Hash UserTokens for security improvement

This commit is contained in:
2024-12-27 13:02:39 +01:00
parent caab707a17
commit 771fc8675f
10 changed files with 767 additions and 272 deletions

View File

@@ -2,6 +2,7 @@
namespace Core\Objects\DatabaseEntity;
use Core\Driver\SQL\Expression\CurrentTimeStamp;
use DateTime;
use Exception;
use Core\Objects\Context;
@@ -20,6 +21,7 @@ class Session extends DatabaseEntity {
private User $user;
private DateTime $expires;
#[MaxLength(45)] private string $ipAddress;
#[MaxLength(36)] protected string $uuid;
#[DefaultValue(true)] private bool $active;
#[MaxLength(64)] private ?string $os;
@@ -28,6 +30,9 @@ class Session extends DatabaseEntity {
#[MaxLength(16)] private string $csrfToken;
#[Json] private mixed $data;
#[DefaultValue(CurrentTimeStamp::class)]
private DateTime $lastOnline;
public function __construct(Context $context, User $user, ?string $csrfToken = null) {
parent::__construct();
$this->context = $context;
@@ -81,7 +86,7 @@ class Session extends DatabaseEntity {
$userAgent = @get_browser($_SERVER['HTTP_USER_AGENT'], true);
$this->os = $userAgent['platform'] ?? "Unknown";
$this->browser = $userAgent['parent'] ?? "Unknown";
} catch (Exception $ex) {
} catch (Exception) {
$this->os = "Unknown";
$this->browser = "Unknown";
}
@@ -112,7 +117,6 @@ class Session extends DatabaseEntity {
}
public function destroy(): bool {
session_destroy();
$this->active = false;
return $this->save($this->context->getSQL(), ["active"]);
}
@@ -120,6 +124,7 @@ class Session extends DatabaseEntity {
public function update(): bool {
$this->updateMetaData();
$this->lastOnline = new DateTime();
$this->expires = (new DateTime())->modify(sprintf("+%d second", Session::DURATION));
$this->data = json_encode($_SESSION ?? []);