@@ -71,15 +71,55 @@ test('accepts multiple expected values', function () {
7171});
7272
7373
74- test ('invalid/typo site value fails ' , function () {
75- $ request = new Http \Request (new Http \UrlScript , headers: ['Sec-Fetch-Site ' => 'same-origin ' ]);
76- Assert::false ($ request ->isFrom ('same-orgin ' ));
74+ test ('invalid/typo site value fails consistently ' , function () {
75+ $ header = new Http \Request (new Http \UrlScript , headers: ['Sec-Fetch-Site ' => 'same-origin ' ]);
76+ Assert::false ($ header ->isFrom ('same-orgin ' ));
77+
78+ $ cookie = new Http \Request (new Http \UrlScript , cookies: [Http \Helpers::StrictCookieName => '1 ' ]);
79+ Assert::false ($ cookie ->isFrom ('same-orgin ' ));
7780});
7881
7982
80- test ('no Sec-Fetch-Site returns false ' , function () {
83+ test ('no header, no cookie returns false ' , function () {
8184 $ request = new Http \Request (new Http \UrlScript );
8285
8386 Assert::false ($ request ->isFrom ('same-origin ' ));
8487 Assert::false ($ request ->isFrom ('cross-site ' ));
8588});
89+
90+
91+ test ('cookie fallback proves only "not cross-site" ' , function () {
92+ $ request = new Http \Request (new Http \UrlScript , cookies: [
93+ Http \Helpers::StrictCookieName => '1 ' ,
94+ ]);
95+
96+ Assert::true ($ request ->isFrom ('same-origin ' ));
97+ Assert::true ($ request ->isFrom ('same-site ' ));
98+ Assert::true ($ request ->isFrom ('none ' ));
99+ Assert::true ($ request ->isFrom (['same-origin ' , 'cross-site ' ]));
100+ Assert::false ($ request ->isFrom ('cross-site ' ));
101+ });
102+
103+
104+ test ('cookie fallback fails closed for dest & user ' , function () {
105+ $ request = new Http \Request (new Http \UrlScript , cookies: [
106+ Http \Helpers::StrictCookieName => '1 ' ,
107+ ]);
108+
109+ // dest/user can't be proven by the cookie alone, so a stricter check must not pass
110+ Assert::false ($ request ->isFrom ('same-origin ' , 'document ' ));
111+ Assert::false ($ request ->isFrom ('same-origin ' , user: true ));
112+ Assert::false ($ request ->isFrom ('same-origin ' , user: false ));
113+ });
114+
115+
116+ test ('cookie fallback not used when Sec-Fetch-Site present ' , function () {
117+ $ request = new Http \Request (new Http \UrlScript , cookies: [
118+ Http \Helpers::StrictCookieName => '1 ' ,
119+ ], headers: [
120+ 'Sec-Fetch-Site ' => 'cross-site ' ,
121+ ]);
122+
123+ Assert::false ($ request ->isFrom ('same-origin ' ));
124+ Assert::true ($ request ->isFrom ('cross-site ' ));
125+ });
0 commit comments