将空的URL用作HTML表单的action属性是否是一种好习惯?(操作=“”)

表单 HTML

伽罗理查德

2020-03-24

我想知道是否有人可以使用空白HTML表单操作将其发布回当前页面,从而给出“最佳实践”响应。

这里有一篇帖子问空白的HTML表单动作是做什么的,并且像这样的一些页面表明它很好,但是我想知道人们的想法。

第3697篇《将空的URL用作HTML表单的action属性是否是一种好习惯?(操作=“”)》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

9个回答
猴子 2020.03.24

当我使用Classic ASP时,我经常这样做。通常,当需要某种形式的服务器端验证作为输入时(在AJAX时代之前),我会使用它。我看到的主要缺点是,它没有在文件级别将编程逻辑与表示分离开来。

乐泡芙 2020.03.24

我以前根本不指定动作属性。实际上是我的框架的设计方式,所有页面都精确地提交回相同的地址。但是今天我发现了问题。有时我借用动作属性值来进行一些后台调用(我猜有些人将它们命名为AJAX)。因此,我发现如果未指定动作属性,IE会将动作属性值保持为空。根据我的理解,这有点奇怪,因为如果未指定action属性,则JavaScript对应项至少必须未定义。无论如何,我的意思是选择最佳实践之前,您需要了解更多上下文,例如是否在JavaScript中使用该属性。

小卤蛋Tom 2020.03.24

只需使用

<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">

它不违反HTML5标准。

SamGil 2020.03.24

我认为最好明确声明表单的发布位置。如果您想完全安全,则要在表单中将表单提交回自身,请在action属性中输入与表单相同的URL。尽管主流浏览器的评估结果""是相同的,但您不能保证非主流浏览器的评估结果会相同。

当然,整个URL包括Juddling之类的GET数据也会指出。

泡芙 2020.03.24

这将使用HTML5进行验证。

<form action="#">
伽罗 2020.03.24

如果不包含action属性,则会打开该页面以进行iframe clickjacking攻击,其中涉及一些简单的步骤:

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

参考文献

卡卡西猪猪 2020.03.24

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="#">
卡卡西 2020.03.24

实际上,当前HTML5草案的“ 表单提交”小节不允许action=""这违反规范。

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

墨卡托答案中引用的部分是对实现的要求,而不是作者的要求作者必须遵守作者的要求。引用如何阅读本规范

In particular, there are conformance requirements that apply to producers, for example authors and the documents they create, and there are conformance requirements that apply to consumers, for example Web browsers. They can be distinguished by what they are requiring: a requirement on a producer states what is allowed, while a requirement on a consumer states how software is to act.

The change from HTML4—which did allow an empty URL—was made because “browsers do weird things with an empty action="" attribute”. Considering the reason for the change, its probably best not to do that in HTML4 either.

Mandy村村 2020.03.24

我通常使用action =“”,它是XHTML有效的,并将GET数据保留在URL中。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android