mirror of
https://github.com/fergalmoran/ladybird.git
synced 2025-12-30 13:19:47 +00:00
Previously, the cookie date validation did not validate days in the context of the month and year, resulting in dates that do not exist to be successfully parsed (e.g. February 31st). We now validate that the day does not exceed the number of days for the given month and year, taking leap years into account.
56 lines
3.2 KiB
HTML
56 lines
3.2 KiB
HTML
<body>
|
|
<h3>Valid cookies:</h3>
|
|
<br /><input type=button onclick="setCookie(this.value)" value="cookie1=value1; max-age=5; path=/res/html" />
|
|
<br /><input type=button onclick="setCookie(this.value)" value="cookie2=value2; expires=Sat, 23 Jan 2060 08:10:36 GMT" />
|
|
<br /><input type=button onclick="setCookie(this.value)" value="cookie3=value3" />
|
|
<br /><input type=button onclick="setCookie(this.value)" value="cookie4=value4;SameSite=Lax" />
|
|
<br /><input type=button onclick="setCookie(this.value)" value="cookie5=value5;SameSite=Strict" />
|
|
<br /><input type=button onclick="setCookie(this.value)" value="cookie6=value6;SameSite=None" />
|
|
<br /><input type=button onclick="setPrettyLargeCookie()" value="cookie7=xxxxx..[2048 x's]" />
|
|
<br />
|
|
|
|
<h3>Invalid cookies (the browser should reject these):</h3>
|
|
<br /><input id=invalid1 type=button onclick="setCookie(this.value)" value="cookie4=value4; domain=serenityos.org" />
|
|
<label for=invalid1>The Domain attribute does not domain-match this page</label>
|
|
<br /><input id=invalid2 type=button onclick="setCookie(this.value)" value="cookie5=value5; httponly" />
|
|
<label for=invalid2>The cookie is HttpOnly thus cannot be set via JavaScript</label>
|
|
<br /><input id=invalid3 type=button onclick="setCookie(this.value)" value="cookie6=value6; max-age=-1" />
|
|
<label for=invalid3>The cookie expired in the past</label>
|
|
<br /><input id=invalid4 type=button onclick="setCookie(this.value)" value="cookie7=value7; expires=Mon, 23 Jan 1989 08:10:36 GMT" />
|
|
<label for=invalid4>The cookie expired in the past</label>
|
|
<br /><input id=invalid5 type=button onclick="setTooLargeCookie()" value="cookie10=[more than 4096 chars]" />
|
|
<label for=invalid5>The cookie is too large</label>
|
|
<br /><input id=invalid6 type=button onclick="setCookie(this.value)" value="cookie11=value11; domain=uk.gov" />
|
|
<label for=invalid6>The cookie's domain is on the Public Suffix List</label>
|
|
<br /><input id=invalid7 type=button onclick="setCookie(this.value)" value="cookie12=value12; expires=Sat, 31 Feb 2060 08:10:36 GMT" />
|
|
<label for=invalid4>The cookie has a date that does not exist</label>
|
|
<br />
|
|
|
|
<h3>Unretrievable cookies (the browser should accept these but not display them):</h3>
|
|
<br /><input id=locked1 type=button onclick="setCookie(this.value)" value="cookie8=value8; path=/not/this/path" />
|
|
<label for=locked1>The Path attribute does not path-match this page</label>
|
|
<br /><input id=locked2 type=button onclick="setCookie(this.value)" value="cookie9=value9; secure" />
|
|
<label for=locked2>The cookie is Secure thus cannot be viewed by a file:// page</label>
|
|
<br />
|
|
|
|
<pre>document.cookie = <span id=cookies></span></pre>
|
|
|
|
<script>
|
|
function setCookie(cookie) {
|
|
document.cookie = cookie;
|
|
document.getElementById('cookies').innerHTML = document.cookie;
|
|
}
|
|
|
|
function setPrettyLargeCookie() {
|
|
setCookie('cookie7=' + 'x'.repeat(2048));
|
|
}
|
|
|
|
function setTooLargeCookie() {
|
|
const cookie = 'name=' + 'x'.repeat(4 << 10);
|
|
setCookie(cookie);
|
|
}
|
|
|
|
document.getElementById('cookies').innerHTML = document.cookie;
|
|
</script>
|
|
</body>
|