我想知道是否有人可以给出一个“最佳实践”的回应,使用空白HTML表单动作发布回当前页面。

有一个帖子问一个空白的HTML表单动作在这里做什么,一些像这样的页面认为它是好的,但我想知道人们是怎么想的。


当前回答

在HTML 5中action=""是不支持的,所以不要这样做。不好的实践。

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

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

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

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

或者你也可以使用# bear in mind,这将像一个锚,滚动到页面顶部。

<form action="#">

其他回答

我认为最好明确地说明表单的位置。如果你想要完全安全,如果你想要表单提交回自身,在action属性中输入相同的URL。尽管主流浏览器会将""赋值到同一页面,但不能保证非主流浏览器也会这样做。

当然,整个URL包括GET数据,就像Juddling指出的那样。

这将在HTML5中验证。

<form action="#">

当你放空动作时,一些安全过滤认为它是恶意的或网络钓鱼。因此,他们可以阻止你的页面。所以建议不要让action=为空。

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

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

8. 让action成为提交者元素的动作。 9. 如果action为空字符串,则让action为文档的地址。 注意:这一步是故意违反RFC 3986的,它需要在这里处理基本URL。这种违反的动机是希望与遗留内容兼容。(RFC3986)

这肯定适用于当前所有的浏览器,但在一些旧的浏览器中可能无法正常工作(“浏览器会对空的action=""属性"做一些奇怪的事情),这就是为什么规范强烈不鼓励作者让它为空:

action和formaction内容属性(如果指定)必须具有一个有效的非空URL值,该值可能被空格包围。

如果不包含action属性,页面会被iframe点击劫持攻击,这涉及到几个简单的步骤:

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

参考文献

绕过CSRF保护ClickJacking和HTTP参数污染