当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《对HTML表单的action属性使用空URL是一种好习惯吗?(动作="")》经验,为你挑选了5个好方法。

我想知道是否有人可以给出使用空白HTML表单操作回发到当前页面的"最佳实践"响应.

有一篇帖子询问这里有一个空白的HTML表单动作,有些像这样的页面表明它很好,但我想知道人们的想法.



1> mercator..:

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

也可以将其留空,任何实现HTML表单提交算法的浏览器都会将其视为与文档地址等效,这主要是因为浏览器当前的工作原理如下:

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

9.如果action是空字符串,则让action为文档的地址.

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

这肯定适用于所有当前的浏览器,但在某些旧版浏览器中可能无法正常工作(" 浏览器使用空操作=""属性 " 做奇怪的事情),这就是为什么规范强烈反对作者将其留空的原因:

actionformaction内容属性,如果指定,必须有一个值是一个有效的非空URL用空格潜在的包围.


可能这已经改变了你的答案(差不多三年),但截至今天,HTML5不允许`action =""` - 请看我的回答......
@derobert谢谢.这可能没有改变.我改变了我的答案,以更好地反映规范所说的内容.

2> derobert..:

实际上,当前HTML5草案的表单提交子部分不允许action="".这是违反规范的.

actionformaction内容属性,如果指定,必须有一个值是一个有效的非空 URL用空格潜在的包围.(重点补充)

mercator的答案中引用的部分是对实现的要求,而不是作者.作者必须遵循作者的要求.引用如何阅读此规范:

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

HTML4的变化 - 确实允许空URL - 是因为" 浏览器使用空action=""属性做奇怪的事情 ".考虑到改变的原因,也许最好不要在HTML4中这样做.


@Kerrick是的,我相信HTML5允许完全省略action属性,并默认为空字符串.HTML4没有,它根据需要指定操作.

3> 小智..:

这将通过HTML5验证.


`action ="."`对于一般情况来说是一个坏主意.像`example.com/login`这样的URL只映射到`example.com /`.
我没有尝试过,但概念上不会在提交后滚动到页面顶部?
行动= "?" 效果也不错.它验证并指向当前页面没有和查询字符串数据.
你不能用`action ="."`?

4> Paul Sweatte..:

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

攻击者将您的网页包装在iframe中

iframe URL包含一个与表单字段同名的查询参数

提交表单时,查询值将插入到数据库中

用户的识别信息(电子邮件,地址等)已被泄露

参考

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


iframe URL是否包含GET参数,而表单通常是使用POST提交的?因此,如果该网站只处理POST参数,那么它不应该是一个问题不是吗?至少我通常只在处理表单时在PHP中使用$ _POST数组.
@Calmarius是的,使用`$ _POST`而不是`$ _REQUEST`来避免这种情况.如果框架的代码使用`$ _REQUEST`,使用[iframe阻止](http://stackoverflow.com/questions/958997/).

5> Buts..:

在HTML 5中action=""不支持所以不要这样做.不好的做法.

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

This will submit to the current page

如果您使用php汇总表单,您可能需要考虑以下内容.在这里阅读更多相关信息.

">

或者你也可以使用#熊,虽然它会像锚一样,滚动到页面顶部.


推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有