8000 Add #[\SensitiveParameter] to $sessionId by mfb · Pull Request #49016 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

Add #[\SensitiveParameter] to $sessionId #49016

New 8000 issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ final class SessionUtils
* Finds the session header amongst the headers that are to be sent, removes it, and returns
* it so the caller can process it further.
*/
public static function popSessionCookie(string $sessionName, string $sessionId): ?string
public static function popSessionCookie(string $sessionName, #[\SensitiveParameter] string $sessionId): ?string
{
$sessionCookie = null;
$sessionCookiePrefix = sprintf(' %s=', urlencode($sessionName));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,21 @@ public function open(string $savePath, string $sessionName): bool
return true;
}

abstract protected function doRead(string $sessionId): string;
abstract protected function doRead(#[\SensitiveParameter] string $sessionId): string;

abstract protected function doWrite(string $sessionId, string $data): bool;
abstract protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool;

abstract protected function doDestroy(string $sessionId): bool;
abstract protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool;

public function validateId(string $sessionId): bool
public function validateId(#[\SensitiveParameter] string $sessionId): bool
{
$this->prefetchData = $this->read($sessionId);
$this->prefetchId = $sessionId;

return '' !== $this->prefetchData;
}

public function read(string $sessionId): string
public function read(#[\SensitiveParameter] string $sessionId): string
{
if (isset($this->prefetchId)) {
$prefetchId = $this->prefetchId;
Expand All @@ -72,7 +72,7 @@ public function read(string $sessionId): string
return $data;
}

public function write(string $sessionId, string $data): bool
public function write(#[\SensitiveParameter] string $sessionId, string $data): bool
{
// see https://github.com/igbinary/igbinary/issues/146
$this->igbinaryEmptyData ??= \function_exists('igbinary_serialize') ? igbinary_serialize([]) : '';
Expand All @@ -84,7 +84,7 @@ public function write(string $sessionId, string $data): bool
return $this->doWrite($sessionId, $data);
}

public function destroy(string $sessionId): bool
public function destroy(#[\SensitiveParameter] string $sessionId): bool
{
if (!headers_sent() && filter_var(\ini_get('session.use_cookies'), \FILTER_VALIDATE_BOOL)) {
if (!isset($this->sessionName)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public function close(): bool
return $this->handler->close();
}

public function destroy(string $sessionId): bool
public function destroy(#[\SensitiveParameter] string $sessionId): bool
{
return $this->handler->destroy($sessionId);
}
Expand All @@ -47,12 +47,12 @@ public function gc(int $maxlifetime): int|false
return $this->handler->gc($maxlifetime);
}

public function read(string $sessionId): string
public function read(#[\SensitiveParameter] string $sessionId): string
{
return $this->marshaller->unmarshall($this->handler->read($sessionId));
}

public function write(string $sessionId, string $data): bool
public function write(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$failed = [];
$marshalledData = $this->marshaller->marshall(['data' => $data], $failed);
Expand All @@ -64,12 +64,12 @@ public function write(string $sessionId, string $data): bool
return $this->handler->write($sessionId, $marshalledData['data']);
}

public function validateId(string $sessionId): bool
public function validateId(#[\SensitiveParameter] string $sessionId): bool
{
return $this->handler->validateId($sessionId);
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\Sensiti 8000 veParameter] string $sessionId, string $data): bool
{
return $this->handler->updateTimestamp($sessionId, $data);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,19 +59,19 @@ public function close(): bool
return $this->memcached->quit();
}

protected function doRead(string $sessionId): string
protected function doRead(#[\SensitiveParameter] string $sessionId): string
{
return $this->memcached->get($this->prefix.$sessionId) ?: '';
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$this->memcached->touch($this->prefix.$sessionId, $this->getCompatibleTtl());

return true;
}

protected function doWrite(string $sessionId, string $data): bool
protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool
{ 10000
return $this->memcached->set($this->prefix.$sessionId, $data, $this->getCompatibleTtl());
}
Expand All @@ -89,7 +89,7 @@ private function getCompatibleTtl(): int
return $ttl;
}

protected function doDestroy(string $sessionId): bool
protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool
{
$result = $this->memcached->delete($this->prefix.$sessionId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function close(): bool
return $result;
}

public function destroy(string $sessionId): bool
public function destroy(#[\SensitiveParameter] string $sessionId): bool
{
$result = $this->currentHandler->destroy($sessionId);
$this->writeOnlyHandler->destroy($sessionId);
Expand All @@ -70,27 +70,27 @@ public function open(string $savePath, string $sessionName): bool
return $result;
}

public function read(string $sessionId): string
public function read(#[\SensitiveParameter] string $sessionId): string
{
// No reading from new handler until switch-over
return $this->currentHandler->read($sessionId);
}

public function write(string $sessionId, string $sessionData): bool
public function write(#[\SensitiveParameter] string $sessionId, string $sessionData): bool
{
$result = $this->currentHandler->write($sessionId, $sessionData);
$this->writeOnlyHandler->write($sessionId, $sessionData);

return $result;
}

public function validateId(string $sessionId): bool
public function validateId(#[\SensitiveParameter] string $sessionId): bool
{
// No reading from new handler until switch-over
return $this->currentHandler->validateId($sessionId);
}

public function updateTimestamp(string $sessionId, string $sessionData): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $sessionData): bool
{
$result = $this->currentHandler->updateTimestamp($sessionId, $sessionData);
$this->writeOnlyHandler->updateTimestamp($sessionId, $sessionData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public function close(): bool
return true;
}

protected function doDestroy(string $sessionId): bool
protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool
{
$this->getCollection()->deleteOne([
$this->options['id_field'] => $sessionId,
Expand All @@ -100,7 +100,7 @@ public function gc(int $maxlifetime): int|false
])->getDeletedCount();
}

protected function doWrite(string $sessionId, string $data): bool
protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime');
$expiry = new UTCDateTime((time() + (int) $ttl) * 1000);
Expand All @@ -120,7 +120,7 @@ protected function doWrite(string $sessionId, string $data): bool
return true;
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime');
$expiry = new UTCDateTime((time() + (int) $ttl) * 1000);
Expand All @@ -136,7 +136,7 @@ public function updateTimestamp(string $sessionId, string $data): bool
return true;
}

protected function doRead(string $sessionId): string
protected function doRead(#[\SensitiveParameter] string $sessionId): string
{
$dbData = $this->getCollection()->findOne([
$this->options['id_field'] => $sessionId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,27 @@ public function close(): bool
return true;
}

public function validateId(string $sessionId): bool
public function validateId(#[\SensitiveParameter] string $sessionId): bool
{
return true;
}

protected function doRead(string $sessionId): string
protected function doRead(#[\SensitiveParameter] string $sessionId): string
{
return '';
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool
{
return true;
}

protected function doWrite(string $sessionId, string $data): bool
protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool
{
return true;
}

protected function doDestroy(string $sessionId): bool
protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool
{
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ public function open(string $savePath, string $sessionName): bool
return parent::open($savePath, $sessionName);
}

public function read(string $sessionId): string
public function read(#[\SensitiveParameter] string $sessionId): string
{
try {
return parent::read($sessionId);
Expand All @@ -305,7 +305,7 @@ public function gc(int $maxlifetime): int|false
return 0;
}

protected function doDestroy(string $sessionId): bool
protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool
{
// delete the record associated with this id
$sql = "DELETE FROM $this->table WHERE $this->idCol = :id";
Expand All @@ -323,7 +323,7 @@ protected function doDestroy(string $sessionId): bool
return true;
}

protected function doWrite(string $sessionId, string $data): bool
protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$maxlifetime = (int) (($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime'));

Expand Down Expand Up @@ -366,7 +366,7 @@ protected function doWrite(string $sessionId, string $data): bool
return true;
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$expiry = time() + (int) (($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime'));

Expand Down Expand Up @@ -610,7 +610,7 @@ private function rollback(): void
* We need to make sure we do not return session data that is already considered garbage according
* to the session.gc_maxlifetime setting because gc() is called after read() and only sometimes.
*/
protected function doRead(string $sessionId): string
protected function doRead(#[\SensitiveParameter] string $sessionId): string
{
if (self::LOCK_ADVISORY === $this->lockMode) {
$this->unlockStatements[] = $this->doAdvisoryLock($sessionId);
Expand Down Expand Up @@ -681,7 +681,7 @@ protected function doRead(string $sessionId): string
* - for oci using DBMS_LOCK.REQUEST
* - for sqlsrv using sp_getapplock with LockOwner = Session
*/
private function doAdvisoryLock(string $sessionId): \PDOStatement
private function doAdvisoryLock(#[\SensitiveParameter] string $sessionId): \PDOStatement
{
switch ($this->driver) {
case 'mysql':
Expand Down Expand Up @@ -780,7 +780,7 @@ private function getSelectSql(): string
/**
* Returns an insert statement supported by the database for writing session data.
*/
private function getInsertStatement(string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement
private function getInsertStatement(#[\SensitiveParameter] string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement
{
switch ($this->driver) {
case 'oci':
Expand All @@ -807,7 +807,7 @@ private function getInsertStatement(string $sessionId, string $sessionData, int
/**
* Returns an update statement supported by the database for writing session data.
*/
private function getUpdateStatement(string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement
private function getUpdateStatement(#[\SensitiveParameter] string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement
{
switch ($this->driver) {
case 'oci':
Expand All @@ -834,7 +834,7 @@ private function getUpdateStatement(string $sessionId, string $sessionData, int
/**
* Returns a merge/upsert (i.e. insert or update) statement when supported by the database for writing session data.
*/
private function getMergeStatement(string $sessionId, string $data, int $maxlifetime): ?\PDOStatement
private function getMergeStatement(#[\SensitiveParameter] string $sessionId, string $data, int $maxlifetime): ?\PDOStatement
{
switch (true) {
case 'mysql' === $this->driver:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,20 @@ public function __construct(
$this->ttl = $options['ttl'] ?? null;
}

protected function doRead(string $sessionId): string
protected function doRead(#[\SensitiveParameter] string $sessionId): string
{
return $this->redis->get($this->prefix.$sessionId) ?: '';
}

protected function doWrite(string $sessionId, string $data): bool
protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime');
$result = $this->redis->setEx($this->prefix.$sessionId, (int) $ttl, $data);

return $result && !$result instanceof ErrorInterface;
}

protected function doDestroy(string $sessionId): bool
protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool
{
static $unlink = true;

Expand Down Expand Up @@ -93,7 +93,7 @@ public function gc(int $maxlifetime): int|false
return 0;
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool
{
$ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime');

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,30 +47,30 @@ public function open(string $savePath, string $sessionName): bool
return $this->handler->open($savePath, $sessionName);
}

protected function doRead(string $sessionId): string
protected function doRead(#[\SensitiveParameter] string $sessionId): string
{
return $this->handler->read($sessionId);
}

public function updateTimestamp(string $sessionId, string $data): bool
public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool
{
return $this->write($sessionId, $data);
}

protected function doWrite(string $sessionId, string $data): bool
protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool
{
return $this->handler->write($sessionId, $data);
}

public function destroy(string $sessionId): bool
public function destroy(#[\SensitiveParameter] string $sessionId): bool
{
$this->doDestroy = true;
$destroyed = parent::destroy($sessionId);

return $this->doDestroy ? $this->doDestroy($sessionId) : $destroyed;
}

protected function doDestroy(string $sessionId): bool
protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool
{
$this->doDestroy = false;

Expand Down
Loading
0