【问题标题】:What is safe way to communicate java applet -> MySQL什么是通信 java applet -> MySQL 的安全方式
【发布时间】:2013-02-26 17:42:54
【问题描述】:

我正在制作一个在网页上运行的小型 Java 游戏。现在我试图让我的游戏与 MySQL db 进行通信,现在它通过 PHP 进行。

这就是发生的事情:

  1. 有基本的登录系统,可以在登录时设置会话 (PHP)。
  2. 当 java 游戏从 db 请求数据时,它会发送 POST (URLConnection) 到 PHP 页面。
  3. PHP 页面检查是否设置了会话,如果设置了,它会回显来自 db 的所需信息。
  4. 使用 PHP 页面输出玩 Java 游戏。

像梦一样工作和跑步!

我唯一担心的是,我实际上必须通过同一个周期将更多数据更改并存储到数据库中。因此,如果您的会话正在运行,您基本上可以制作漂亮的 HTML 表单并为您的角色设置更好的武器。

我尝试在 Google 上搜索与数据库通信的基本方法以及服务器如何安全工作的基本理论。没有简单的答案。

所以很快我的问题是,

在java应用程序和数据库之间进行通信(读写)的安全和正确的方式是什么?

对于未来的 android 应用程序等,我很高兴你能给我一个正确的方向。

谢谢!

【问题讨论】:

    标签: java php mysql login


    【解决方案1】:

    没有。如果有任何方式客户端可以从外部直接向服务器发出任意 SQL 查询,那么几乎没有任何保护措施可以阻止任何人对他们想要的数据库做任何事情,包括 SELECT * FROM users 和 @ 987654322@.

    您总是希望在外部世界和您的服务器组件之间有一个 API,它明确定义了允许的操作并阻止其他任何操作。允许任意 SQL 查询基本上是一种 API,允许不受限制地访问数据库中的所有内容,这通常过于宽泛。

    您通常执行此操作的方式是定义客户端可以执行的许多操作,并通过 API(例如 REST API)公开它们。 Java 客户端与此 API 对话,无论服务器幕后发生什么都无关紧要。这不是关于“与数据库交谈”,而是关于在服务器上做某些事情。这些东西的数量是并且应该是有限的。

    【讨论】:

    • 现在我通过获取 setWeapon=3 之类的属性然后进行 SQL 查询“UPDATE users SET Weapon=setWeapon WHERE userId = [userIdFromSession]”来进行限制。即使通过 API,我如何才能安全地进行这些“更新”?对不起,如果我脱离上下文,只是想得到图片。 ;)
    • 因为您的 API 定义了可以执行的有限数量的查询,而您只是插入客户端发送的值(希望以防止 SQL 注入的方式)。您的 API 正在检查是否允许用户执行某个操作(对吗?!)。那是安全的。不允许任何人执行任何 SQL 查询。
    • 是的,但是我怎样才能阻止用户登录然后通过 HTML
      使用我的 API 并设置他/她选择的武器?比起在游戏中作弊,我不怕打针。
    • 这是一个完全不同的话题,涉及到你的服务器正在检查用户是否被允许做某事。这要求服务器对游戏状态有足够的了解,以决定当前允许什么,不允许什么。在任何服务器-客户端应用程序中,这都是一个相当复杂的话题,尤其是在主要只在客户端上运行的游戏中。没有简单的答案,我也没有。
    • 好的。我会继续寻找。谢谢!
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2012-04-05
      • 2011-01-30
      • 1970-01-01
      • 2010-10-25
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多