Content-Security-Policy: form-action 指令

Baseline 已广泛支持

该特性已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 4 月以来,它已在各大浏览器上可用。

HTTP Content-Security-Policy (CSP) 的 form-action 指令限制了给定上下文中表单提交的目标 URL。

警告: form-action 是否应阻止表单提交后的重定向存在争议,并且浏览器在此方面的实现不一致(例如,Firefox 57 不阻止重定向,而 Chrome 63 阻止)。

CSP 版本 2
指令类型 导航指令
default-src 回退 否。不设置此项则允许任何内容。

语法

http
Content-Security-Policy: form-action 'none';
Content-Security-Policy: form-action <source-expression-list>;

此指令可以具有以下值之一

'none'

不允许进行任何表单提交。单引号是强制性的。

<source-expression-list>

以空格分隔的源表达式值列表。表单提交可以发送到与任何给定源表达式匹配的 URL。对于此指令,以下源表达式值适用

示例

Meta 标签配置

html
<meta http-equiv="Content-Security-Policy" content="form-action 'none'" />

Apache 配置

apacheconf
<IfModule mod_headers.c>
  Header set Content-Security-Policy "form-action 'none';"
</IfModule>

Nginx 配置

nginx
add_header Content-Security-Policy "form-action 'none';"

违规案例

使用将 action 设置为内联 JavaScript 的 <form> 元素将导致 CSP 违规。

html
<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'".
-->

规范

规范
内容安全策略级别 3
# directive-form-action

浏览器兼容性

另见