The HTTP Content-Security-Policy (CSP) form-action directive restricts the URLs which can be used as the target of a form submissions from a given context.
Whether form-action should block redirects after a form submission is debated and browser implementations of this aspect are inconsistent (e.g. Firefox 57 doesn't block the redirects whereas Chrome 63 does).
| CSP version | 2 |
|---|---|
| Directive type | Navigation directive |
default-src fallback | No. Not setting this allows anything. |
One or more sources can be set for the form-action policy:
Content-Security-Policy: form-action <source>; Content-Security-Policy: form-action <source> <source>;
<source> can be one of the following:
'*'), and you may use a wildcard (again, '*') as the port number, indicating that all legal ports are valid for the source.http://*.example.com: Matches all attempts to load from any subdomain of example.com using the http: URL scheme.mail.example.com:443: Matches all attempts to access port 443 on mail.example.com.https://store.example.com: Matches all attempts to access store.example.com using https:.data: Allows data: URIs to be used as a content source. This is insecure; an attacker can also inject arbitrary data: URIs. Use this sparingly and definitely not for scripts.
mediastream: Allows mediastream: URIs to be used as a content source.blob: Allows blob: URIs to be used as a content source.filesystem: Allows filesystem: URIs to be used as a content source.'self'blob and filesystem from source directives. Sites needing to allow these content types can specify them using the Data attribute.'unsafe-inline'<script> elements, javascript: URLs, inline event handlers, and inline <style> elements. You must include the single quotes.'unsafe-eval'eval() and similar methods for creating code from strings. You must include the single quotes.'none''unsafe-inline' which could still be set for older browsers without nonce support.script-src for external scripts.strict-dynamic source expression specifies that the trust explicitly given to a script present in the markup, by accompanying it with a nonce or a hash, shall be propagated to all the scripts loaded by that root script. At the same time, any whitelist or source expressions such as 'self' or 'unsafe-inline' will be ignored. See script-src for an example.<meta http-equiv="Content-Security-Policy" content="form-action 'none'">
<IfModule mod_headers.c> Header set Content-Security-Policy "form-action 'none'; </IfModule>
add_header Content-Security-Policy "form-action 'none';"
Using a <form> element with an action set to inline JavaScript will result in a CSP violation.
<meta http-equiv="Content-Security-Policy" content="form-action 'none'">
<form action="javascript:alert('Foo')" id="form1" method="post">
<input type="text" name="fieldName" value="fieldValue">
<input type="submit" id="submit" value="submit">
</form>
// Error: Refused to send form data because it violates the following
// Content Security Policy directive: "form-action 'none'". | Specification | Status | Comment |
|---|---|---|
| Content Security Policy Level 3 The definition of 'form-action' in that specification. | Working Draft | No changes. |
| Content Security Policy Level 2 The definition of 'form-action' in that specification. | Recommendation | Initial definition. |
| Desktop | ||||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
| Basic support | 40 | 15 | 36 | No | 27 | 10 |
| Mobile | |||||||
|---|---|---|---|---|---|---|---|
| Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
| Basic support | Yes | Yes | No | 36 | ? | 9.3 | Yes |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/form-action