我正在开发一个拥有独立和孤立宇宙的游戏(对于那些了解这个游戏的人来说,就像ogame一样)。一个玩家(帐户)与一个宇宙相关联,但一个玩家(物理)可以为每个宇宙创建一个帐户。
因此玩家可以登录多个宇宙并在玩游戏时切换宇宙。
为此,我创建了Authentication
类,其中存储了id
已记录的播放器和Universe名称(这是我的PostgreSQL数据库中的模式名称)。
因此,Authentication
对象表示已记录的播放器。为了管理应用程序角色,我使用一个自定义域,它只收集id
和Universe名称(来自我的Authentication
对象)来处理SQL请求并获取组名以将其转换为角色。
所有这些机制都很好。
我想知道这样做真的有用吗?攻击者是否可以向我的领域发送请求并在其请求中注入id
和Universe名称以直接处理身份验证?因为我的领域既不需要密码也不需要用户名(在我的应用程序之前处理以创建Authentication
对象),这样的恶意请求可能会起作用。
所以我的问题只是要知道我的领域的请求是否可以在我的Java应用程序(或我的Glassfish服务器)之外进行?
答案 0 :(得分:1)
假设请求发生在应用程序之外,并且源自客户端,那么如果您不验证用户名/密码,则可能有人可能会在您的应用程序之外发出请求并违反您的安全性。您应该在提交领域/ Universe时要求提交用户名/密码,并在那时验证用户是否有权获得他们正在进行的请求。不要只是确保用户名/密码有效,而是确认它们是为他们登录的Universe以及他们尝试访问的领域/角色注册的。如果你不需要这个,你可以打开自己的攻击。</ p>
Firefox和Firebug很不错,但它没有向您显示原始请求。要真正查看请求和发生的事情,您应该使用像Wireshark这样的数据包嗅探器。如果你能在那里看到请求,那么你很容易受到攻击。还要确保用户名/密码是加密的,并且无法以纯文本形式查看,否则攻击者可以通过嗅探线来提取用户的凭据。
如果所有处理都发生在服务器端并且没有客户端请求发起(并且您在客户端的Wireshark中看不到任何内容),那么您可能是安全的。