1

看一下这个登录页面,特别是标记为 Returning Members 的部分中的表单。正如您可以通过查看 HTML 或使用 Firebug 等工具进行挖掘来验证的那样,实际表单包含四个标签:一个用于电子邮件地址和密码,一个名为“memberAlready”的不可见输入,其中包含值“yes”,和一个图像形式的提交按钮。到目前为止,完全通用。

但是,如果您在提交表单时检查表单数据(使用Tamper Data或其他浏览器上的等效项,您将看到两个额外的表单字段已潜入响应中:ACTION(loginCheckout).x和 ACTION(loginCheckout).y。

它们都有两位整数值,这表明它们只是用来验证提交者是实际的网络浏览器而不是机器人。据推测,它们与提交按钮有关,其定义如下:

<input type="image" name="ACTION(loginCheckout)" value="Login" src="/images/login/login.gif">

令我困惑的是,即使在浏览器中禁用了 JavaScript ,这些额外的表单字段也会出现。因此,它们可能不仅仅是某个事件处理程序在某处插入的东西。

此外,如果您以编程方式提交表单(例如,通过在 JavaScript 控制台中运行 document.forms[1].submit()),则不会生成额外的字段并且登录尝试会失败。这向我表明,字段的插入取决于基本 HTML 表单提交机制之外的东西。但如果不是 JavaScript,那“东西”可能是什么,我不知道。

有没有人认识到这种模式或有关于如何插入验证字段的理论?

4

2 回答 2

4

看看您在此处发布的代码:

<input type="image" name="ACTION(loginCheckout)" value="Login" src="/images/login/login.gif">

请注意,这是一个用于提交登录表单的图像输入类型。提交时似乎注入的附加值只是您单击图像以提交表单的 x 和 y 坐标。它们不是 JavaScript 在表单提交时注入的附加值,它们是由浏览器本身添加的。

尝试单击图像的不同区域并查看值的变化。

当您使用 JavaScript 提交表单时,您不会单击图像,这就是表单提交中不包含 x 和 y 值的原因。

替换<input type="submit" />元素的图像将删除 x 和 y 坐标。

希望有帮助。

于 2012-04-12T01:22:47.290 回答
1

您看到的 X 和 Y 值是因为提交按钮是输入类型=图像。它们对应于图像中单击图像时光标所在的 X 和 Y 位置。它们是由浏览器本身添加的,因为HTML 规范需要它。第 17.4.1 节指出,对于图像输入类型

当使用定点设备单击图像时,会提交表单并将单击坐标传递给服务器。x 值以图像左侧的像素为单位,y 值以图像顶部的像素为单位。提交的数据包括name.x=x-value和name.y=y-value,其中“name”是name属性的值,x-value和y-value分别是x和y坐标值。

你会注意到它只提到了指针设备的使用。如果您使用键盘提交,则不会创建值。

于 2012-04-12T01:21:07.960 回答