1use axum::{
4 body::Body,
5 http::{header, HeaderValue, Request},
6 middleware::Next,
7 response::Response,
8};
9
10pub async fn add_security_headers(req: Request<Body>, next: Next) -> Response {
12 let mut response = next.run(req).await;
13 let headers = response.headers_mut();
14
15 headers.insert(
16 header::X_CONTENT_TYPE_OPTIONS,
17 HeaderValue::from_static("nosniff"),
18 );
19 headers.insert(header::X_FRAME_OPTIONS, HeaderValue::from_static("DENY"));
20 headers.insert(
21 header::CONTENT_SECURITY_POLICY,
22 HeaderValue::from_static(
23 "default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'none'",
24 ),
25 );
26 headers.insert(
27 "referrer-policy",
28 HeaderValue::from_static("strict-origin-when-cross-origin"),
29 );
30 headers.insert(
31 "permissions-policy",
32 HeaderValue::from_static("geolocation=(), microphone=(), camera=()"),
33 );
34
35 response
36}