对HTML表单的action属性使用空URL是一种好习惯吗? (动作= “”)

时间:2009-07-15 14:34:12

标签: forms web-standards string html

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

a post asking what a blank HTML form action does herethis one这样的网页表明它很好,但我想知道人们的想法。

11 个答案:

答案 0 :(得分:255)

您可以做的最好的事情是完全忽略action属性。如果您将其删除,表格将提交到文件的地址,即同一页面。

也可以将其留空,任何实现HTML's form submission algorithm的浏览器都会将其视为与文档地址等效,这主要是因为浏览器目前的工作原理如下:

  

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

     

9.如果action为空字符串,请将操作设为the document's address

     

注意:此步骤是RFC 3986的willful violation,此处需要进行基本URL处理。这种违规行为的动机是希望与传统内容兼容。 [RFC3986]

这绝对适用于所有当前浏览器,但在某些旧版浏览器中可能无法正常工作(browsers do weird things with an empty action="" attribute),这就是为什么the spec strongly discourages authors from leaving it empty

  

actionformaction内容属性(如果已指定)必须具有valid non-empty URL potentially surrounded by spaces的值。

答案 1 :(得分:72)

实际上,当前HTML5草稿的Form Submission subsection不允许action=""。这是违反规范的。

  

actionformaction内容属性(如果已指定)必须具有可能由空格包围的有效非空 URL的值。 (重点补充)

mercator's answer中的引用部分是实现的要求,而不是 authors 。作者必须遵循作者的要求。引用How to read this specification

  

特别是,有一致性要求适用于生产者,例如作者及其创建的文档,并且存在适用于消费者的一致性要求,例如Web浏览器。它们可以根据它们的要求来区分:生产者要求允许的是什么,而对消费者的要求说明了软件的行为方式。

HTML4的更改 - 确实允许空网址 - 是因为“browsers do weird things with an empty action="" attribute”。考虑到改变的原因,最好不要在HTML4中这样做。

答案 2 :(得分:16)

不包括action属性会打开最多iframe clickjacking次攻击的页面,其中包含几个简单的步骤:

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

<强>参考

答案 3 :(得分:15)

这将通过HTML5验证。

<form action="#">

答案 4 :(得分:6)

在HTML 5中action=""不支持,所以不要这样做。坏习惯。

如果你完全否定了行动,它会默认提交到同一页面,我相信这是最好的做法:

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

如果您使用php汇总表单,您可能需要考虑以下内容。 read more about it here.

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

或者你可以使用#记住,虽然这会像锚点一样滚动到页面顶部。

<form action="#">

答案 5 :(得分:4)

我认为明确表示表单发布的最佳状态。如果您想要完全安全,请在action属性中输入表单所在的URL,如果您希望将其提交回自身。虽然主流浏览器会将""评估为同一页面,但您无法保证非主流浏览器会这样做。

当然,整个网址包括像Juddling这样的GET数据。

答案 6 :(得分:4)

我通常使用action =“”,这是XHTML有效并保留URL中的GET数据。

答案 7 :(得分:2)

只需使用

  

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

它不违反HTML5标准。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

答案 10 :(得分:0)

当您执行空操作时,则某些安全筛选将其视为恶意或网络钓鱼。因此,他们可以阻止您的页面。因此建议不要将action =空白。