2

首先,我知道这个问题已经被问过好几次了,我已经对这个主题做了很多研究,但我似乎无法找到一个明确的答案。我要么在这里遗漏了一些重要的东西,要么这是不可能的,我只是在浪费你的时间。开始:

想象一个数据库,假设它只存储 1000 行,由一个 id、一个必须在某些时候更改的布尔值(0 或 1)和一个带有一些信息的常量字符串值组成。仅当用户在客户端 java 应用程序中提交了所需的操作时,才能访问该信息并且可以更改该值。只有存在才是至关重要的。

在我的万维网搜索过程中,我遇到了两个可以满足我需求的选项。

  1. 在数据库本身上为每个用户设置权限,并让用户使用自己的用户名和密码从应用程序登录。然后,客户端应用程序可以按照用户的意愿与数据库通信,根据需要执行读取和写入数据库的任务。

  2. 使用三层方法,让 java 应用程序与 PHP 接口通信,该接口执行查询并返回一个编码的 json 字符串,java 应用程序可以解析该字符串。我了解了基本概念,您将客户端的用户名和密码发送到 PHP 接口,该接口检查客户端是否符合条件并相应地执行查询。没什么大不了的。

我似乎无法弄清楚如何只让 java 客户端更改和检索数据。例如,如果有人想知道方法 1 中字符串的内容是什么,他们可以简单地使用他们的用户名和密码并直接查询数据库。反编译后,查询很容易从 java 应用程序中获取。至于#2,如果应用程序被反编译,PHP 接口也可以被逆向工程,允许用户通过利用 PHP 脚本来查询数据库,即使不知道数据库的实际密码和用户名。

我必须指出,用户根本不受信任,数据库的内容应该保密,直到在 java 应用程序中满足某些条件。有没有办法做到这一点?如果有一种我不知道的方法,我肯定不会停留在这两个选项上。感谢您提前提供的所有帮助。

4

1 回答 1

0

我们正在使用 PHP 后端实现类似的 HTML5/Javscript SPA,但随后它向 Java 服务器 API 发出 SOAP 请求以处理所有 MySQL 事务。这样做的好处是客户端只能看到 HTML 和缩小的 Javascript,没有对 Java 服务器的调用,但他们仍然能够看到对我的 PHP 服务器的 AJAX 调用。由于 Java 函数是通过 SOAP 直接从服务器而不是客户端调用的,因此我将 90% 的安全性集中在 HTML5/PHP 服务器上。Java 服务器只需要限制对我的服务器 IP 的访问,并且只接受格式正确的 SOAP 请求。

话虽如此,我已经进行了检查以阻止这种情况,并希望防止 99% 的用户完成“黑客”系统:会话、计时器,以确保客户不会太快或在没有呼叫之前拨打太多电话那,缩小代码,在我的调用中设置特定的标题等等。它会出错吗?是的。但是有记录系统来跟踪尝试。然后,我们可以阻止那些过于频繁地提出无效请求的人或其他人的访问。

最终,类似的设置对您有用,但请记住,记录无效呼叫并定期检查这些呼叫或设置通知系统会减少尝试。如果您在用户可以反编译的 Java 部分中直接使用 MySQL 调用,我不鼓励这样做,而是只在 PHP 服务器上调用处理这些调用的函数。这至少会向用户隐藏数据库描述以阻止黑客攻击。

对于每个应用程序,只需密切监视它。当您看到成功的黑客攻击时,请找出下次阻止它的方法。这样它就永远不会以同样的方式工作两次。

于 2013-04-20T15:55:55.637 回答