Sécuriser mon site avec les content-security-policy

flexi2202 -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour à tous,

Je voudrais pouvoir rendre ma boutique en ligne la plus sécurisée possible.
Mais je rencontre un problème avec les Content-Security-Policy :
En utilisant ce code en .htaccess,

<IfModule mod_headers.c>
  Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com/ajax/libs/jquery/ 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'; object-src 'none'; manifest-src 'none'; media-src 'none'; worker-src 'none'; upgrade-insecure-requests; block-all-mixed-content"
</IfModule>

Lorsque je passe le test dans https://csp-evaluator.withgoogle.com/,
J'ai cette alerte :

"script-src : Les listes d'autorisation des hôtes peuvent souvent être contournées. Pensez à utiliser 'strict-dynamic' en combinaison avec des nonces ou des hachages CSP."

Cela pourrait se régler avec ce code ou quelque chose se rapprochant du code ci-dessous, sauf que les directives se font écraser par le serveur Apache de Hostinger.

<?php
// Au début du fichier PHP, générez le nonce
$nonce = base64_encode(random_bytes(16));

// Définir l'en-tête CSP avec le nonce
header("Content-Security-Policy: default-src 'self'; " .
    "object-src 'none'; " .
    "script-src 'self' 'nonce-{$nonce}' https://cdnjs.cloudflare.com; " .
    "script-src-elem 'self' 'nonce-{$nonce}' https://cdnjs.cloudflare.com; " .
    "style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; " .
    "img-src 'self' data:; " .
    "media-src 'self'; " .
    "connect-src 'self'; " .
    "font-src 'self' https://cdnjs.cloudflare.com; " .
    "frame-ancestors 'none'; " .
    "base-uri 'self'; " .
    "form-action 'self';");
?>

<!-- Puis dans le HTML, utiliser le nonce dans les balises script -->
<script nonce="<?php echo $nonce; ?>">
    // Votre code JavaScript ici
</script>

J'ai essayé des dizaines de configurations mais :

  • soit j'ai des erreurs dans la console,
  • soit la validation des en-têtes ne fonctionne pas parfaitement.
A voir également:

1 réponse

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 

Bonjour,

Je n'ai jamais mis en place ce mécanisme donc j'espère pouvoir te fournir une réponse utile.

  • Avec htaccess: voir cette piste.
  • Avec apache : voir cette piste.
  • Avec PHP : si je me réfère à ce tutoriel j'ai l'impression qu'il manque dans ton en-tête l'attribut "strict-dynamic".
Content-Security-Policy:
  script-src 'nonce-{RANDOM}' 'strict-dynamic';
  object-src 'none';
  base-uri 'none';

Bonne chance

0