Crates.io | origin_check |
lib.rs | origin_check |
version | 0.2.2 |
source | src |
created_at | 2024-01-11 05:09:15.42746 |
updated_at | 2024-01-12 09:38:47.815187 |
description | A minimal Tower middleware layer for mitigating CSRF attacks |
homepage | |
repository | https://github.com/benwr/origin_check |
max_upload_size | |
id | 1095865 |
size | 41,566 |
A minimal Tower
middleware layer for mitigating CSRF attacks.
Examines the Origin
or Referer
header of incoming requests, and compares
it to the target Host
and URI
.
let (mock_service, _) = tower_test::mock::spawn::<http::Request<()>, ()>();
let csrf_proof_service = origin_check::OriginCheck::new(mock_service);
This crate makes several assumptions that must all be true for it to be a good choice for you:
https
or
on localhost
.GET
or HEAD
requests.
Such requests are always allowed by this service, regardless of CSRF
indicators.Origin
or
Referer
does not exactly match the Host
. This means that you cannot,
e.g., send POST requests from one subdomain to another, or from one port to
another.Origin
or Referer
header on
non-GET
/-HEAD
requests, when those requests are initiated by your site.
In order to ensure this, be careful that the Referrer-Policy
for your site
is not set to no-referrer
.You probably want to set SameSite=Strict
or SameSite=Lax
on any
authentication cookies, as additional protection against CSRF.
You likely also want to set X-Frame-Options: DENY
for your site by default,
to prevent clickjacking, which is a distinct but related problem to CSRF.
A minimal Tower middleware layer for mitigating CSRF attacks.