CSP : form-action
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis avril 2017.
La directive HTTP Content-Security-Policy form-action restreint les URL pouvant être utilisées comme cibles d'envoi de formulaire depuis un contexte donné.
Attention :
La question de savoir si form-action doit bloquer les redirections après une soumission de formulaire est encore débattue et les implémentations des navigateurs sur cet aspect sont hétérogènes (par exemple Firefox 57 ne les bloque pas, contrairement à Chrome 63).
| Version de CSP | 2 |
|---|---|
| Type de directive | Directive de navigation |
Utilisation de default-src par défaut |
Non, ne pas définir cette directive autorise toutes les adresses. |
Syntaxe
Une ou plusieurs sources peuvent être utilisées pour cette directive :
Content-Security-Policy: form-action <source>;
Content-Security-Policy: form-action <source> <source>;
Sources
<source> peut être n'importe quelle valeur parmi celles énumérées dans l'article sur les valeurs sources CSP.
On notera que cet ensemble de valeurs peut être utilisé pour toutes les directives de récupération (et pour certaines autres directives).
Exemples
>Configuration avec la balise <meta>
<meta http-equiv="Content-Security-Policy" content="form-action 'none'" />
Configuration avec Apache
<IfModule mod_headers.c>
Header set Content-Security-Policy "form-action 'none';"
</IfModule>
Configuration avec Nginx
add_header Content-Security-Policy "form-action 'none';"
Cas de violation
Utiliser un élément <form> avec un attribut action contenant un script JavaScript résultera dans ce cas en une violation de CSP :
<meta http-equiv="Content-Security-Policy" content="form-action 'none'" />
<form action="javascript:console.log('toto')" id="form1" method="post">
<input type="text" name="nomChamp" value="valeurChamp" />
<input type="submit" id="submit" value="Envoyer" />
</form>
<!--
Error: Refused to send form data because it violates the following
Content Security Policy directive: "form-action 'none'".
-->
Spécifications
| Specification |
|---|
| Content Security Policy Level 3> # directive-form-action> |
Compatibilité des navigateurs
Chargement…