如何从Web应用程序中阻止特定客户端?

时间:2012-08-01 02:11:22

标签: java cookies security access-control

有一个Java应用程序请求页面,我希望阻止它。

我认为这样做的一种方法是使用会话或cookie,但我不确定Java URL方法是否可以处理它们。

除了使用会话或cookie之外,还有其他方法可以区分来自此Java应用程序的请求并阻止它吗?我知道它有一个独特的Java用户代理标题,但我希望更准确。

2 个答案:

答案 0 :(得分:2)

网址只是您尝试与之交谈的服务器的表示。它有一些方便的方法来打开连接等等,但就是这样。

会话通过以下两种方式之一处理:cookie或URL重写。这些与URL类很少或没有关系(除了会话ID放在后者的URL中)。

用户代理似乎是您最好的选择,除了启用一些密码(http基本,摘要等...)或ssl证书验证。话虽如此,用户代理完全由客户自行决定,客户可以轻易更改用户代理以模仿其他浏览器。

答案 1 :(得分:2)

标题问题的答案是URL.openXxx方法不了解cookie。

(如果您的服务器配置为接受请求URL本身的会话令牌,URL.openXxx方法将不会妨碍。但是,这种方法是不安全的。)

然后我们来到你的问题的主体。

  

...除了使用会话或cookie之外还有另外一种方法可以区分来自这个java应用程序的请求并阻止它吗?

此时,我假设您正在谈论在服务器端阻止请求。我应该指出,“坏人”客户端用来发送请求的是 immaterial 。 (它可以使用URL或Apache HTTPComponents,也可以在汇编代码中实现HTTP协议栈!)

所以真正的问题是你有什么选择来阻止不需要的请求。答案是:

  • 您可以根据请求网址进行阻止,但这可能适得其反。
  • 您可以根据请求标头中是否存在会话(或其他)Cookie来阻止。这是进行访问控制的常规方式,假设您安全地发布和处理cookie,这很难打败。
  • 您可能要求会话令牌在请求URL中传递,但这会带来基本的安全问题。
  • 您可以依赖其他“信息性”标题...例如用户代理标题,但这是无足轻重的。
  • 您可以根据请求源IP地址进行阻止,但所有坏人需要做的是从不同的IP地址发送请求。
  • 您可以通过使用HTTP over SSL / TLS和客户端证书来限制访问,但这意味着您必须为所有合法客户端主机管理证书,这在大多数环境中都存在问题。

总之,cookie是最好的解决方案,因此“好人”客户端应用程序需要使用能够进行cookie管理并在请求中设置cookie的库。