如何区分从HTML表单提交的HTTP请求和从客户端提交的HTTP请求?

时间:2008-09-25 05:58:23

标签: java http

有没有办法(在Java Servlet中)确定HTTP POST或GET请求是否来自HTML表单提交的结果?

7 个答案:

答案 0 :(得分:6)

您可以使用隐藏的表单字段+ Cookie。

您可以做的是设置nonce,并将其作为表单的隐藏字段。然后,您可以将其应用于与表单一起发送的cookie。 cookie应链接到隐藏字段,并且还应包含某种nonce。最后,在提交表单时,您可以检查cookie和隐藏字段,看看它们是否正确。如果需要,请将其链接到表单原始请求的IP地址和用户代理。你甚至可以用一些Javascript来加强这一切。将隐藏字段设置为空白,然后使用一些ajax从服务器请求隐藏字段现时。

这不是完美的,但那应该会让你获得80%-90%的路。拥有不错的HTTP技能的人仍然可以欺骗它。

然而,它提出了一个问题,为什么要在该级别区分请求?

或者你真的只想弄清楚用户是否点击了“提交”按钮? (如果是这种情况,那么提交按钮的名称/值对应该在请求实体/查询字符串中......取决于表单方法。)

答案 1 :(得分:0)

我认为除非客户端本身是合作的(这意味着客户端设置了一些标题),否则这是不可能的。

答案 2 :(得分:0)

不是真的。您可以检查用户代理字符串,但可以由调用者设置。

答案 3 :(得分:0)

好吧,您可以查看代理字符串,看看它是来自浏览器还是来自您的客户端应用程序(假设它有自己的代理字符串)

答案 4 :(得分:0)

如果您可以控制客户端,则可以附加自定义标头以标识发件人。

一些javascript库在创建XmlHTTPRequests时已经这样做了,因此您可以处理与标准请求不同的Ajax调用。

检查每个传入请求的标头,看看是否有任何可以使用的内容。

答案 5 :(得分:0)

使用一些JavaScript设置一些值。

答案 6 :(得分:0)

您不清楚是否要在合法的不同访问方法或伪造的attac(即机器人或黑客试图看起来像普通用户)之间进行dinstinguish。

在第一种情况下,keprao有一些检查标题的好建议。在第二种情况下,基本上没有办法区分请求,但机器人可能会受到验证码或身份验证的阻碍。