区分从HTML表单提交的HTTP请求和从用户提交的HTTP请求

时间:2009-03-04 04:48:13

标签: java

我已经为服务器发送和接收的信息编写了java代码。这个问题是我如何区分从HTML表单提交的HTTP请求和从用户提交的HTTP请求。我们正在尝试通过HTTP头中的引用,但对于第一个请求,引用者为空。因此这个选项是不可行的。还有其他API /其他方法吗?请通过示例代码告诉我们...... 谢谢, PS

4 个答案:

答案 0 :(得分:3)

我现在更好地理解这个问题了。简单回答是不。更复杂的答案是,你能做的最好就是做出明智的猜测。

如果请求没有Referrer标头(1),那么这可能意味着用户直接转到URL(通过在地址栏中输入或者选择书签)。这里的问题是你不能保证收到那个标题,所以你不得不希望浏览器正在运行。

接下来,如果请求类型是POST并且mime类型是“application / x-www-form-urlencoded”或“multipart / form-data”那么这通常是表单提交,即用户点击了提交或类似的。(2

使用浏览器的用户不能(通常)直接发出POST请求。

所以这是帮助你做出最佳猜测的几个基本规则,但是浏览器方面有很多东西可以搞乱这个逻辑我真的不认为你会找到一些能帮到你的东西准确。

答案 1 :(得分:0)

这是高级别的算法:

  1. 生成HTML表单时,生成随机数/字符串/ GUID并将其作为隐藏输入嵌入表单中。将此随机值存储在服务器端(在应用程序上下文中,在LinkedHashMap so you can set a maximum size/MRU cache中,以某种cache solution等方式存储)。
  2. 处理表单请求时,请检查是否存在此随机令牌。
    • 如果请求包含随机令牌,则source = HTML form
    • 其他,source = human
  3. 您还可以在发送原始HTML表单时设置Cookie,检查它们在回发中的存在;把一些数据放在Session对象中等;这些都是同一个想法的变种。

答案 2 :(得分:0)

如果这是出于安全原因,那么这是不可能的。浏览器发送给您的任何内容也可以由用户发送。

但不清楚用户发送的是什么意思。

答案 3 :(得分:0)

像布林迪说的那样。检查方法,如果其帖子检查mime类型。它准确无误。除非用户是专业人士,否则他将不知道如何伪造表单提交,并且大多数使用邮件进行通信而非浏览器的应用程序将指定不同的mime类型。