Skip to content
New 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

Set a Path on the CSRF cookie #944

Merged
merged 1 commit into from
Jan 4, 2025

Conversation

horazont
Copy link
Contributor

@horazont horazont commented Jan 3, 2025

Without setting a Path, the UA will infer the Path from the URL path, meaning that it will take the "directory name" of a URL path (so for a response for a resource at /index, the path would be inferred as /, and for a response for /foo/bar it would be inferred to be /foo/ etc.).

This is problematic with CSRF for multiple reasons:

  • It causes a proliferation of CSRF cookies which pollute client-side storage.

  • It breaks CSRF when requests are sent across paths. For example, if a resource at /foo/bar contains a form which submits to /index, they would be theoretically using different CSRF states.

  • Poem only processes a single cookie, which means that we have to rely on the ordering specified in RFC 6265 Section 5.4. This is bad for two reasons:

    1. The ordering is only a SHOULD, not a MUST.
    2. Poem does, in fact, not process cookies in the correct ordering (this is subject of another commit to fix).

Note that this commit may break applications if they share a CSRF cookie name with other applications hosted at different paths on the same domain.

Without setting a Path, the UA will infer the Path from the URL path,
meaning that it will take the "directory name" of a URL path (so for a
response for a resource at `/index`, the path would be inferred as `/`,
and for a response for `/foo/bar` it would be inferred to be `/foo/`
etc.).

This is problematic with CSRF for multiple reasons:

- It causes a proliferation of CSRF cookies which pollute client-side
  storage.
- It breaks CSRF when requests are sent across paths. For example, if a
  resource at `/foo/bar` contains a form which submits to `/index`, they
  would be theoretically using different CSRF states.
- Poem only processes a single cookie, which means that we have to rely
  on the ordering specified in RFC 6265 Section 5.4. This is bad for two
  reasons:

  1. The ordering is only a SHOULD, not a MUST.
  2. Poem does, in fact, not process cookies in the correct ordering
     (this is subject of another commit to fix).

Note that this commit may break applications if they share a CSRF cookie
name with other applications hosted at different paths on the same
domain.
@sunli829 sunli829 merged commit 61d625a into poem-web:master Jan 4, 2025
7 checks passed
@horazont
Copy link
Contributor Author

horazont commented Jan 4, 2025

Thanks for merging and for the fast release!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants