CSP
Content Security Policy — builder, directives.
Configuration dans le builder
main.rs
RuniqueApp::builder(config)
.middleware(|m| {
m.with_csp(|c| {
c.policy(SecurityPolicy::strict())
.with_header_security(true) // X-Frame-Options, X-Content-Type, etc.
.with_upgrade_insecure(!is_debug()) // HTTP → HTTPS en prod
.images(vec!["''self''", "data:"]) // Autorise data: pour les images
})
})
Configuration dans le builder
main.rs
RuniqueApp::builder(config)
.middleware(|m| {
m.with_csp(|c| {
c.policy(SecurityPolicy::strict())
.with_header_security(true) // X-Frame-Options, X-Content-Type, etc.
.with_upgrade_insecure(!is_debug()) // HTTP → HTTPS en prod
.images(vec!["''self''", "data:"]) // Autorise data: pour les images
})
})
Politiques predefinies
// Strict : bloque tout ce qui n''est pas explicitement autorise
SecurityPolicy::strict()
// Permissive : pour les phases de dev / migration
SecurityPolicy::permissive()
// Header genere (strict) :
// Content-Security-Policy:
// default-src ''self'';
// script-src ''self'' ''nonce-abc123'';
// style-src ''self'';
// img-src ''self'' data:;
// object-src ''none'';
// frame-ancestors ''none'';
// upgrade-insecure-requests
Politiques predefinies
// Strict : bloque tout ce qui n''est pas explicitement autorise
SecurityPolicy::strict()
// Permissive : pour les phases de dev / migration
SecurityPolicy::permissive()
// Header genere (strict) :
// Content-Security-Policy:
// default-src ''self'';
// script-src ''self'' ''nonce-abc123'';
// style-src ''self'';
// img-src ''self'' data:;
// object-src ''none'';
// frame-ancestors ''none'';
// upgrade-insecure-requests
Nonce CSP pour scripts inline
template
{# Le nonce est regenere a chaque requete.
Il est injecte automatiquement dans le header CSP. #}
<script nonce="{{ csp_nonce }}">
// Ce script inline est autorise par la CSP
document.querySelector(''form'').addEventListener(''submit'', ...);
</script>
Nonce CSP pour scripts inline
template
{# Le nonce est regenere a chaque requete.
Il est injecte automatiquement dans le header CSP. #}
<script nonce="{{ csp_nonce }}">
// Ce script inline est autorise par la CSP
document.querySelector(''form'').addEventListener(''submit'', ...);
</script>