Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 对HTML表单使用空URL是一种好的做法吗';什么是动作属性?(行动=“行动”)_Forms_Web Standards_String_Html - Fatal编程技术网

Forms 对HTML表单使用空URL是一种好的做法吗';什么是动作属性?(行动=“行动”)

Forms 对HTML表单使用空URL是一种好的做法吗';什么是动作属性?(行动=“行动”),forms,web-standards,string,html,Forms,Web Standards,String,Html,我想知道是否有人能对使用空白HTML表单操作发回当前页面给出“最佳实践”回应 有一些网页建议这样做很好,但我想知道人们的想法。我认为最好明确说明表单的发布位置。如果希望完全安全,请在“操作”属性中输入表单所在的URL(如果希望表单提交回自身)。尽管主流浏览器对同一页面进行“评估,但您不能保证非主流浏览器会这样做 当然,整个URL包括像Juddling指出的那样获取数据 我在使用经典ASP时经常这样做。通常我在输入需要某种形式的服务器端验证时使用它(在AJAX出现之前)。我看到的主要缺点是,它没有

我想知道是否有人能对使用空白HTML表单操作发回当前页面给出“最佳实践”回应

有一些网页建议这样做很好,但我想知道人们的想法。

我认为最好明确说明表单的发布位置。如果希望完全安全,请在“操作”属性中输入表单所在的URL(如果希望表单提交回自身)。尽管主流浏览器对同一页面进行
评估,但您不能保证非主流浏览器会这样做


当然,整个URL包括像Juddling指出的那样获取数据

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

最好的办法是完全省略action属性。如果不填写,表格将提交到文档的地址,即同一页

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

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

9.
如果action是空字符串,则让action为空

注意:此步骤是RFC 3986的一个步骤,需要在此处进行基本URL处理。这种违规行为的动机是希望与遗留内容兼容

这肯定适用于所有当前浏览器,但在某些较旧的浏览器(“”)中可能无法按预期工作,这就是为什么:

action
formaction
内容属性(如果指定)的值必须为

实际上,当前HTML5草案的版本不允许
action=”“
。这是违反规格的

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

中引用的部分是对实现的要求,而不是对作者的要求。作者必须遵守作者要求。引述:

特别是,存在适用于生产者(例如作者及其创建的文档)的一致性要求,以及适用于消费者(例如Web浏览器)的一致性要求。它们可以通过它们所需要的东西来区分:对生产者的要求说明了什么是允许的,而对消费者的要求说明了软件如何运行


HTML4允许空URL的更改是因为“”。考虑到改变的原因,最好也不要在HTML4中这样做。

这将在HTML5中得到验证

<form action="#">


不包括action属性会打开页面,从而导致攻击,这涉及到几个简单的步骤:

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


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

只需使用

?


它不违反HTML5标准。

在HTML5中
操作=“
不受支持,所以不要这样做。坏习惯

相反,如果您完全否定操作,它将默认提交到同一页面,我相信这是最佳实践:

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

当您放置空操作时,一些安全过滤将其视为恶意或仿冒。因此,他们可以阻止您的页面。因此,建议不要将action=保留为空。

为什么不?我想它没有连接。我可以使用一个表单将数据发布到同一页面,并使用控制器和视图的适当分离构建此页面。建议对此应用“最佳实践”标记。要双重确认,请将操作留空,或者干脆不提及任何操作(如
)。它将自行提交操作。不包含操作属性会打开页面,使其遭受攻击,例如攻击者将页面包装在iframe中,而iframe URL包含与表单字段同名的查询参数。提交表单时,查询值会插入数据库,因此用户的标识信息(电子邮件、地址等)已被泄露。那么,向当前页面提交表单的有效、安全的方法是什么?不包括action属性也是无效的HTML。它作为必需属性在规范中。空动作也有自己的怪癖:。可能这在你的回答之后已经改变了(已经快三年了),但从今天起,HTML5不允许
action=“”
-请看我的答案…@derobert谢谢。这可能没有改变。我已经更改了答案,以更好地反映规范的内容。我没有尝试过,但从概念上讲,提交后不会滚动到页面顶部吗?您不能使用
操作吗=
<form>This will submit to the current page</form>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<form action="#">