【问题标题】:Java realm and secured requestJava 领域和安全请求
【发布时间】:2013-03-17 10:30:35
【问题描述】:

我正在开发一款具有分离和孤立宇宙的游戏(对于了解这款游戏的人来说,就像 ogame)。一名玩家(帐户)与一个 Universe 相关联,但一名玩家(实体)可以为每个 Universe 创建一个帐户。

所以玩家可以在玩的时候登录多个宇宙并切换宇宙。

为此,我创建了 Authentication 类,该类存储了记录的玩家和宇宙名称的 id(这是我的 PostgreSQL 数据库中的架构名称)。

因此,Authentication 对象表示已登录的玩家。为了管理应用程序角色,我使用了一个自定义领域,该领域仅收集 id 和 Universe 名称(来自我的 Authentication 对象)来处理 SQL 请求并获取组名称以将其转换为角色。

所有这些机制都可以正常工作。

我想知道这样做是否真的安全?攻击者可以向我的领域发送请求并注入他的请求id 和宇宙名称以直接处理身份验证吗?因为我的领域既不需要密码也不需要用户名(之前在我的应用程序中处理以创建Authentication 对象),这样的恶意请求可能会起作用。

所以我的问题只是想知道是否可以在我的 Java 应用程序(或我的 Glassfish 服务器)之外向我的领域发出请求?

【问题讨论】:

  • 使用 Firefox 和 Firebug,我们看不到发送到我的领域的请求。这是否意味着没有人可以看到信息是如何发送到我的领域来处理身份验证的?泰

标签: java security realm


【解决方案1】:

假设请求发生在应用程序之外,并且来自客户端,那么如果您不验证用户名/密码,则很可能有人会在您的应用程序之外提出请求并侵犯您的安全性。您应该在提交领域/宇宙时要求提交用户名/密码,并在那时验证用户是否有权执行他们提出的请求。不仅要确保用户名/密码有效,还要验证他们是否已为他们正在登录的 Universe 以及他们尝试访问的领域/角色进行了注册。如果你不需要这个,你就会为攻击敞开心扉。

Firefox 和 Firebug 很不错,但它不会向您显示原始请求。要真正查看请求和发生了什么,您应该使用像 Wireshark 这样的数据包嗅探器。如果您可以在那里看到请求,那么您很容易受到攻击。还要确保用户名/密码是加密的,并且不能以纯文本形式查看,否则攻击者可以通过嗅探网络来提取用户的凭据。

如果所有处理都发生在服务器端并且没有发起客户端请求(并且您在客户端的 Wireshark 中没有看到任何内容),那么您可能是安全的。

【讨论】:

  • 我知道这可能是一种“奇怪”的用户身份验证方式,但我的目的是允许用户同时连接多个帐户,因此,借助下拉列表,无需注销即可切换帐户/再次登录。我将使用 Wireshark 检查建议的数据包,如果我有任何疑问,我将重构我的代码。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多