我想知道有没有人可以给出使用空白HTML表单操作将数据提交回当前页面的"最佳实践"建议。
有一篇文章在这里问什么是空白的HTML表单操作,而一些网页像这个网页则认为这样做是可以的,但我想知道其他人怎么想。
我想知道有没有人可以给出使用空白HTML表单操作将数据提交回当前页面的"最佳实践"建议。
有一篇文章在这里问什么是空白的HTML表单操作,而一些网页像这个网页则认为这样做是可以的,但我想知道其他人怎么想。
最好的做法是完全省略 action 属性。如果将其省略,则表单将被提交到文档的地址,即同一页面。
也可以将其留空,并且任何实现 HTML 表单提交算法 的浏览器都会将其视为等同于文档的地址,这主要是因为当前浏览器的工作方式:
8.
将 action 设为提交元素的 action。
9.
如果 action 是空字符串,则将其设为 文档的地址。注意:此步骤是对 RFC 3986 的 故意违规,该规范要求在此处进行基本 URL 处理。这种违规是出于与遗留内容兼容性的考虑。[RFC3986]
这在所有现代浏览器中肯定可行,但在一些旧版浏览器中可能无法按预期工作("浏览器对空 action="" 属性的处理有些怪异"),这就是为什么规范强烈建议作者不要留空:
action
和formaction
内容属性如果指定,则必须具有有效的非空URL,可能被空格包围。
action = ""
——请参见我的答案... - derobert实际上,当前HTML5草案的表单提交子部分不允许action=""
。这违反了规范。
action
和formaction
内容属性(如果指定),必须具有有效的非空URL值,可能带有空格。(强调添加)
mercator's answer中引用的部分是对实现的要求,而不是作者的要求。作者必须遵循作者要求。引用How to read this specification:
HTML4允许空URL,但由于“浏览器对空的特别地,有适用于生产者(例如作者和他们创建的文档)的一致性要求,以及适用于消费者(例如Web浏览器)的一致性要求。它们可以通过它们所要求的来区分:对生产者的要求说明了允许什么,而对消费者的要求则说明了软件应如何行动。
action=""
属性会产生奇怪的行为”,因此进行了更改。考虑到更改的原因,在HTML4中最好也不要这样做。不包括 action 属性会导致页面容易受到 iframe 点击劫持 攻击,攻击包括以下几个简单步骤:
参考资料
$_POST
而不是 $_REQUEST
可以避免这种情况。如果框架代码使用了 $_REQUEST
,可以使用一个 iframe buster。 - Paul Sweatte这将使用HTML5进行验证。
<form action="#">
action="."
? - s427action="."
是一个不好的选择。像 example.com/login
这样的URL仅被映射为 example.com/
。 - Torsten Bronger在 HTML 5 中,action=""
不被支持,因此不要这样做。这是一种不好的做法。
相反,如果完全取消 action
,它会默认提交到同一页。我认为这是最佳实践:
<form>This will submit to the current page</form>
如果您正在使用PHP提交表单,您可能需要考虑以下内容。 在此处阅读更多信息。
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
或者您可以使用#
,但请记住这将像锚点一样,滚动到页面顶部。
<form action="#">
htmlspecialchars()
函数可以防止他人利用你的php脚本攻击你。 - GeorgeButter我认为最好明确地说明表单提交的位置。如果您想要完全安全,请在操作属性中输入与表单相同的URL,以便将其提交回自身。尽管主流浏览器将""评估为同一页面,但无法保证非主流浏览器会这样做。
当然,整个URL包括GET数据,就像Juddling指出的那样。
只需使用
?
<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">
它不违反HTML5标准。
我过去通常不指定 action 属性。实际上,我的框架是这样设计的,所有页面都会被提交到同一个地址。但今天我发现了一个问题。有时我借用 action 属性值来进行后台调用(我猜有些人称之为 AJAX)。所以我发现,如果没有指定 action 属性,IE 会将其保留为空。在我看来有点奇怪,因为如果没有指定 action 属性,JavaScript 对应属性至少应该是未定义的。无论如何,我的观点是,在选择最佳实践之前,您需要更多地了解上下文,比如是否在 JavaScript 中使用该属性。
我曾经在使用Classic ASP时经常这样做。通常,当需要对输入进行服务器端验证(在AJAX出现之前)时,我会使用它。我看到的主要缺点是,在文件级别上它不能将编程逻辑与演示分开。
当您将空操作放置时,某些安全过滤器会认为它是恶意或钓鱼行为。因此,它们可能会阻止您的页面。因此建议不要保留action = blank。
<form name="xyz" >
)。它会自动提交操作。 - Jackie