diff --git a/packages/http/src/Session/InvalidSessionId.php b/packages/http/src/Session/InvalidSessionId.php new file mode 100644 index 000000000..8b1c519ca --- /dev/null +++ b/packages/http/src/Session/InvalidSessionId.php @@ -0,0 +1,17 @@ +assertSame($id, (string) new SessionId($id)); + } + + #[Test] + #[TestWith(['../../../../etc/passwd'])] + #[TestWith(['../../tmp/marker'])] + #[TestWith(['foo/bar'])] + #[TestWith(['with space'])] + #[TestWith(['with.dot'])] + #[TestWith(["null\0byte"])] + #[TestWith(["trailing-newline\n"])] + #[TestWith([''])] + public function rejects_traversal_and_unsafe_identifiers(string $id): void + { + $this->expectException(InvalidSessionId::class); + + new SessionId($id); + } + + #[Test] + public function rejects_overly_long_identifiers(): void + { + $this->expectException(InvalidSessionId::class); + + new SessionId(str_repeat('a', 129)); + } +}