我想知道是否有人可以给出一个“最佳实践”的回应,使用空白HTML表单动作发布回当前页面。
有一篇询问空白HTML表单动作在这里做什么的帖子和一些页面,如这一个建议它是好的,但我想知道人们的想法。
我认为最好显式地声明表单发布的位置。如果你想要完全安全,如果你想要表单提交回自身,在action属性中输入相同的URL。尽管主流浏览器对同一页面的""进行评估,但你不能保证非主流浏览器会这样做。
""
当然,整个URL包括GET数据,就像Juddling指出的那样。
当我使用Classic ASP时,我经常这样做。我通常在需要对输入进行某种服务器端验证时使用它(在AJAX出现之前)。我所看到的主要缺点是它没有在文件级别上将编程逻辑与表示分开。
您能做的最好的事情就是完全省略action属性。如果你省略了它,表格将被提交到文件的地址,即同一页。
也可以将其保留为空,任何实现HTML的表单提交算法的浏览器都会将其视为等同于文档的地址,这主要是因为浏览器当前的工作方式是这样的:
8.让action是提交者元素的行动。 9.如果action是空字符串,让action为文件地址。 注意:这一步是RFC 3986的故意违反,这将需要在这里处理基本URL。这种违反的动机是希望与遗留内容兼容。[RFC3986]
8.让action是提交者元素的行动。
8.
9.如果action是空字符串,让action为文件地址。
9.
注意:这一步是RFC 3986的故意违反,这将需要在这里处理基本URL。这种违反的动机是希望与遗留内容兼容。[RFC3986]
这肯定在当前所有浏览器中都有效,但在一些旧浏览器中可能无法正常工作(浏览器用一个空动作做了一些奇怪的事情=""属性< / >“),这就是为什么规范强烈建议作者不要让它空着:
action和formaction内容属性,如果指定,必须有一个值为有效的非空URL可能被空格包围。
action
formaction
实际上,当前HTML5草案的提交表格分段不允许action=""。这是违反规格的。
action=""
action和formaction内容属性,如果指定,必须有一个有效的非空 URL值,可能被空格包围。(重点)
墨卡托的回答中引用的部分是实现的要求,而不是作者。作者必须遵循作者要求。引用如何阅读本说明书:
特别是,有一些一致性要求适用于生产者,例如作者和他们创建的文档,还有一些一致性要求适用于消费者,例如Web浏览器。它们可以通过它们的需求来区分:对生产者的需求说明了允许什么,而对消费者的需求说明了软件如何操作。
html4允许空url,而html4的改变是因为“浏览器对空的action=""属性做了一些奇怪的事情”。考虑到更改的原因,最好也不要在HTML4中这样做。
这将在HTML5中验证。
<form action="#">
不包含action属性会打开页面,导致iframe“点击劫持”攻击,这涉及到几个简单的步骤:
参考文献
我习惯完全不指定动作属性。这实际上是我的框架是如何设计的,所有页面都提交回完全相同的地址。但是今天我发现了一个问题。有时我借用动作属性值来进行一些后台调用(我猜有些人将其命名为AJAX)。所以我发现IE保持动作属性值为空,如果动作属性没有指定。在我的理解中,这有点奇怪,因为如果没有指定操作属性,对应的JavaScript至少必须是未定义的。无论如何,我的观点是,在你选择最佳实践之前,你需要了解更多的上下文,比如你是否会在JavaScript中使用属性。
只使用
?
<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">
它并不违反HTML5标准。
在HTML 5中不支持__abc0,所以不要这样做。不好的实践。
如果你完全否定动作,默认情况下它会提交到同一个页面,我相信这是最好的做法:
<form>This will submit to the current page</form>
如果您使用php提交表单,您可能需要考虑以下内容。点击这里阅读更多信息。
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
或者,你也可以使用#,但要记住,这将充当一个锚,并滚动到页面顶部。
#
当你放空动作时,一些安全过滤认为它是恶意的或网络钓鱼。因此,他们可以阻止你的页面。所以建议不要让action=为空。