【问题标题】:How can I block a particular client from a web application?如何阻止特定客户端访问 Web 应用程序?
【发布时间】:2012-07-29 21:40:37
【问题描述】:

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

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

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

【问题讨论】:

  • URL() 与会话或 cookie 有什么关系?
  • 那么您是说 Java 应用程序正在访问您的网站并且您想阻止它?
  • 是的。好吧,我想跟踪它提出的请求。我将通过发送 404 标头来完成。由于真正的客户端(mozilla、chrome 等)永远不会 404,我会知道哪个是 java bot,哪个不是。
  • @pst:我的意思是,用 URL() 打开的 url。该方法是否考虑了会话?
  • 我(个人)建议您看看 Apache HTTPComponents (hc.apache.org),因为它是我在需要支持会话处理时使用的解决方案。恕我直言

标签: java cookies security access-control


【解决方案1】:

标题问题的答案是URL.openXxx 方法不理解cookies。

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

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

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

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

所以真正的问题是您有哪些选项可以阻止不需要的请求。答案是:

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

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

【讨论】:

    【解决方案2】:

    URL 只是您尝试与之交谈的服务器的代表。它有一些方便的方法来打开连接等等,但仅此而已。

    会话可以通过以下两种方式之一进行处理:cookie 或 url 重写。这些与 URL 类几乎没有关系(除了会话 id 被放置在后者的 URL 中)。

    用户代理似乎是您最好的选择,缺少一些密码(http 基本、摘要等)或 ssl 证书验证。话虽如此,用户代理完全由客户端自行决定,并且可以很容易地被客户端更改以模拟其他浏览器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多