我想知道是否有人可以对使用空白 HTML 表单操作回发到当前页面给出“最佳实践”响应。
有一篇帖子询问空白 HTML 表单操作在这里做了什么,像这个这样的一些页面表明它很好,但我想知道人们的想法。
我想知道是否有人可以对使用空白 HTML 表单操作回发到当前页面给出“最佳实践”响应。
有一篇帖子询问空白 HTML 表单操作在这里做了什么,像这个这样的一些页面表明它很好,但我想知道人们的想法。
您能做的最好的事情就是完全省略 action 属性。如果您不填写,表格将被提交到文件的地址,即同一页。
也可以将其留空,任何实现HTML 表单提交算法的浏览器都会将其视为等同于文档的地址,这主要是因为浏览器当前是这样工作的:
8.
让 action 成为提交者元素的action。
9.
如果 action 是空字符串,让 action 是文档的地址。注意:此步骤是故意违反RFC 3986,需要在此处处理基本 URL。这种违规的动机是希望与遗留内容兼容。[RFC3986]
这绝对适用于所有当前的浏览器,但在某些旧浏览器中可能无法按预期工作(“浏览器使用空的 action="" 属性做奇怪的事情”),这就是规范强烈建议作者不要将其留空的原因:
和content 属性
action
(formaction
如果指定)必须具有一个可能被空格包围的有效非空 URL的值。
实际上,当前 HTML5 草案的表单提交小节不允许action=""
. 这是违反规范的。
和content 属性
action
(formaction
如果指定)必须具有一个可能被空格包围的有效非空URL 的值。(重点补充)
墨卡托答案中引用的部分是对implementations的要求,而不是authors。作者必须遵守作者要求。引用如何阅读本规范:
特别是,有适用于生产者的一致性要求,例如作者和他们创建的文档,还有适用于消费者的一致性要求,例如 Web 浏览器。它们可以通过它们的要求来区分:对生产者的要求说明了允许的内容,而对消费者的要求说明了软件的行为方式。
对 HTML4 的更改(确实允许空 URL)是因为“<a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=14215#c1" rel="noreferrer" >浏览器用空action=""
属性做奇怪的事情”。考虑到更改的原因,最好不要在 HTML4 中这样做。
不包括 action 属性会打开页面以进行iframe 点击劫持攻击,这涉及几个简单的步骤:
参考
这将使用 HTML5 进行验证。
<form action="#">
不支持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="#">
我认为最好明确说明表格的发布位置。如果您想完全安全,请在 action 属性中输入与表单所在的 URL 相同的 URL,如果您希望它提交回自身。尽管主流浏览器评估""
到相同的页面,但您不能保证非主流浏览器会评估。
当然,包括 GET 数据(如 Juddling)在内的整个 URL 都指出了这一点。
只需使用
?
<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">
它不违反 HTML5 标准。
当我使用 Classic ASP 时,我经常这样做。通常,当需要对输入进行某种服务器端验证时(在 AJAX 时代之前),我会使用它。我看到的主要缺点是它没有在文件级别将编程逻辑与表示分离。
我以前根本不指定动作属性。这实际上是我的框架的设计方式,所有页面都被提交回完全相同的地址。但是今天我发现了问题。有时我借用 action 属性值来进行一些后台调用(我猜有些人将它们命名为 AJAX)。所以我发现如果没有指定动作属性,IE 会将动作属性值保持为空。我的理解有点奇怪,因为如果没有指定动作属性,则 JavaScript 对应项至少必须是未定义的。无论如何,我的观点是在您选择最佳实践之前,您需要了解更多上下文,例如您是否会在 JavaScript 中使用该属性。
当您执行空操作时,某些安全过滤会认为它是恶意的或网络钓鱼。因此,他们可以阻止您的页面。因此,建议不要将 action= 保留为空白。