302

我想知道是否有人可以对使用空白 HTML 表单操作回发到当前页面给出“最佳实践”响应。

一篇帖子询问空白 HTML 表单操作在这里做了什么,像这个这样的一些页面表明它很好,但我想知道人们的想法。

4

10 回答 10

294

您能做的最好的事情就是完全省略 action 属性。如果您不填写,表格将被提交到文件的地址,即同一页。

也可以将其留空,任何实现HTML 表单提交算法的浏览器都会将其视为等同于文档的地址,这主要是因为浏览器当前是这样工作的:

8.让 action 成为提交者元素的action

9.如果 action 是空字符串,让 action 是文档的地址

注意:此步骤是故意违反RFC 3986,需要在此处处理基本 URL。这种违规的动机是希望与遗留内容兼容。[RFC3986]

这绝对适用于所有当前的浏览器,但在某些旧浏览器中可能无法按预期工作(浏览器使用空的 action="" 属性做奇怪的事情),这就是规范强烈建议作者不要将其留空的原因:

和content 属性actionformaction如果指定)必须具有一个可能被空格包围的有效非空 URL的值。

于 2009-07-15T15:10:15.580 回答
79

实际上,当前 HTML5 草案的表单提交小节不允许action="". 这是违反规范的。

和content 属性actionformaction如果指定)必须具有一个可能被空格包围的有效非空URL 的值。(重点补充)

墨卡托答案中引用的部分是对implementations的要求,而不是authors。作者必须遵守作者要求。引用如何阅读本规范

特别是,有适用于生产者的一致性要求,例如作者和他们创建的文档,还有适用于消费者的一致性要求,例如 Web 浏览器。它们可以通过它们的要求来区分:对生产者的要求说明了允许的内容,而对消费者的要求说明了软件的行为方式。

对 HTML4 的更改(确实允许空 URL)是因为“<a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=14215#c1" rel="noreferrer" >浏览器用空action=""属性做奇怪的事情”。考虑到更改的原因,最好不要在 HTML4 中这样做。

于 2012-03-13T03:35:08.643 回答
18

不包括 action 属性会打开页面以进行iframe 点击劫持攻击,这涉及几个简单的步骤:

  • 攻击者将您的页面包装在 iframe 中
  • iframe URL 包含一个与表单字段同名的查询参数
  • 提交表单时,将查询值插入数据库
  • 用户的身份信息(电子邮件、地址等)已被泄露

参考

于 2012-08-17T17:39:28.807 回答
17

这将使用 HTML5 进行验证。

<form action="#">
于 2012-04-25T11:12:15.650 回答
13

不支持HTML 5 action="",所以不要这样做。不好的做法。

相反,如果您完全否定操作,它将默认提交到同一页面,我相信这是最佳实践:

<form>This will submit to the current page</form>

如果您使用 php 提交表单,您可能需要考虑以下内容。在这里阅读更多信息。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

或者,您可以使用#记住,尽管这将起到锚的作用并滚动到页面顶部。

<form action="#">
于 2016-09-08T16:34:08.877 回答
4

我认为最好明确说明表格的发布位置。如果您想完全安全,请在 action 属性中输入与表单所在的 URL 相同的 URL,如果您希望它提交回自身。尽管主流浏览器评估""到相同的页面,但您不能保证非主流浏览器会评估。

当然,包括 GET 数据(如 Juddling)在内的整个 URL 都指出了这一点。

于 2009-07-15T14:40:41.167 回答
2

只需使用

?

<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">

它不违反 HTML5 标准。

于 2015-09-08T12:29:54.730 回答
1

当我使用 Classic ASP 时,我经常这样做。通常,当需要对输入进行某种服务器端验证时(在 AJAX 时代之前),我会使用它。我看到的主要缺点是它没有在文件级别将编程逻辑与表示分离。

于 2009-07-15T14:44:06.493 回答
1

我以前根本不指定动作属性。这实际上是我的框架的设计方式,所有页面都被提交回完全相同的地址。但是今天我发现了问题。有时我借用 action 属性值来进行一些后台调用(我猜有些人将它们命名为 AJAX)。所以我发现如果没有指定动作属性,IE 会将动作属性值保持为空。我的理解有点奇怪,因为如果没有指定动作属性,则 JavaScript 对应项至少必须是未定义的。无论如何,我的观点是在您选择最佳实践之前,您需要了解更多上下文,例如您是否会在 JavaScript 中使用该属性。

于 2013-04-13T01:59:29.723 回答
0

当您执行空操作时,某些安全过滤会认为它是恶意的或网络钓鱼。因此,他们可以阻止您的页面。因此,建议不要将 action= 保留为空白。

于 2020-10-14T04:49:41.233 回答