1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-15 15:24:57 +00:00
Commit graph

18 commits

Author SHA1 Message Date
Brian Gianforcaro
1682f0b760 Everything: Move to SPDX license identifiers in all files.
SPDX License Identifiers are a more compact / standardized
way of representing file license information.

See: https://spdx.dev/resources/use/#identifiers

This was done with the `ambr` search and replace tool.

 ambr --no-parent-ignore --key-from-file --rep-from-file key.txt rep.txt *
2021-04-22 11:22:27 +02:00
Timothy Flynn
2381b19719 Browser+LibWeb+WebContent: Parse cookies in the OOP tab
To protect the main Browser process against nefarious cookies, parse the
cookies out-of-process and then send the parsed result over IPC to the
main process. This way, if the cookie parser blows up, only that tab
will be affected.
2021-04-16 19:19:31 +02:00
Timothy Flynn
5c6aa408ed Browser: Implement spec-compliant cookie retrieval
https://tools.ietf.org/html/rfc6265#section-5.4
2021-04-15 09:46:49 +02:00
Timothy Flynn
858ba11aef Browser: Respect the HttpOnly flag when storing cookies 2021-04-14 16:07:46 +02:00
Timothy Flynn
c00760c5f9 Browser+LibWeb+WebContent: Track the source of document.cookie requests
To implement the HttpOnly attribute, the CookieJar needs to know where a
request originated from. Namely, it needs to distinguish between HTTP /
non-HTTP (i.e. JavaScript) requests. When the HttpOnly attribute is set,
requests from JavaScript are to be blocked.
2021-04-14 16:07:46 +02:00
Timothy Flynn
7193e518d1 Browser+LibWeb: Move the cookie structure into LibWeb 2021-04-14 16:07:46 +02:00
Timothy Flynn
c2d38abe6f Browser+LibWeb: Move cookie parser into LibWeb
This moves the cookie parsing steps out of CookieJar into their own file
inside LibWeb. It makes sense for the cookie structures to be in LibWeb
for a couple reasons:

1. There are some steps in the spec that will need to partially happen
   from LibWeb, such as the HttpOnly attribute.
2. Parsing the cookie string will be safer if it happens in the OOP tab
   rather than the main Browser process. Then if the parser blows up due
   to a malformed cookie, only that tab will be affected.
3. Cookies in general are a Web concept not specific to a browser.
2021-04-14 16:07:46 +02:00
Timothy Flynn
cc7c86fdf4 Browser: Remove expired cookies from the CookieJar
The spec doesn't have any exact steps here, it just notes:

     The user agent MUST evict all expired cookies from the cookie store
     if, at any time, an expired cookie exists in the cookie store.

Here, we implement "at any time" as "when a cookie is retrieved or
stored".
2021-04-13 21:59:30 +02:00
Timothy Flynn
86bdfa1edf Browser: Implement spec-compliant cookie storage
https://tools.ietf.org/html/rfc6265#section-5.3

This includes a bit of an update to how cookies are first parsed. The
storage spec requires some extra information from the parsing steps than
just the actual values that were parsed. For example, it needs to know
whether Max-Age or Expires (or both) were specified to give precedence
to Max-Age. To accommodate this, the parser now uses an intermediate
struct for storing this information. The final Cookie struct is not
created until the storage steps.

The storage itself is also updated to be keyed by a combo of the cookie
name, domain, and path.

Retrieving cookies was updated to use the spec's domain-matching
algorithm, but otherwise is not written to the spec yet. This also does
not handle evicting expired cookies yet.
2021-04-13 15:52:50 +02:00
Timothy Flynn
d363ed8872 Browser: Change value of "the latest representable date" for cookies
Setting the year to NumericLimits<unsigned>::max() resulted in the
following datetime: -2-12-31 00:00:00.

Instead, set the latest datetime to the last second of the year 9999.
2021-04-12 22:37:00 +02:00
Timothy Flynn
5496d71e4a Browser: Add debug command to dump cookies
Using document.cookie only lets the test page see the name/value pair;
the value returned will not included the parsed attributes.
2021-04-12 22:37:00 +02:00
Timothy Flynn
cab2e2dded Browser: Process Expires cookie attribute 2021-04-12 22:37:00 +02:00
Timothy Flynn
e0f9ed01c7 Browser: Process Secure and HttpOnly cookie attributes 2021-04-12 08:57:44 +02:00
Timothy Flynn
db24186309 Browser: Process Path cookie attribute 2021-04-12 08:57:44 +02:00
Timothy Flynn
3d53af354e Browser: Process Domain cookie attribute 2021-04-12 08:57:44 +02:00
Timothy Flynn
a554676008 Browser: Process Max-Age cookie attribute
Note: the default expiry time should be the "the latest representable
date". However, DateTime::from_timestamp(NumericLimits<time_t>::max())
isn't feasible due to the for-loops in LibC's time_to_tm. So instead,
this just sets the date to the maxium year.
2021-04-12 08:57:44 +02:00
Timothy Flynn
d610aeb5da Browser: Parse cookie attribute name-value pairs
Implements the remainder of the parsing algorithm of RFC-6265 Section
5.2 to extract optional attributes. The attribute values are not
processed.
2021-04-12 08:57:44 +02:00
Timothy Flynn
f0cdb2bf50 Browser: Initial cookie storage implementation
This adds storage for cookies that maye be set via 'document.cookie' in
JavaScript or the Set-Cookie HTTP header. For now, it parses only the
name-value pair from a set-cookie line, but does not parse optional
attributes.

Currently, storage is ephemeral and only survives for the lifetime of
the Browser instance.
2021-04-11 18:24:34 +02:00