【问题标题】:Secure MySQL connection in Java?Java中的安全MySQL连接?
【发布时间】:2017-09-26 18:52:06
【问题描述】:

我试试这个:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sonoo","root","password");

但有人很容易破解用户名和密码字符串。

使用 zip、winrar 或任何其他程序打开应用程序看起来像这样并读取代码。

如何保护我的连接?

【问题讨论】:

    标签: java mysql security jdbc connection


    【解决方案1】:

    您需要决定获取您的 JAR 副本的人拥有哪些权限。他们是否有权运行数据库查询?

    如果他们不应该:删除数据库连接。他们没有权限。

    如果他们应该:那么他们可以获得密码。他们有权限。

    似乎让您感到困惑的是您正在为您的数据库提供 root 密码,因此您需要第三个选项:“他们应该能够进行一些数据库查询,但不是其他人。”

    JAR 文件是尝试解决该问题的错误位置。 如果您尝试在 JAR 文件级别解决此问题,则会发生以下两种情况之一。要么您的用户一直都是值得信赖的,而您使用任何精心设计的方案都浪费了您的时间,或者您的一些最终用户不值得信赖,其中一个会攻击您。他们将通过在 JVM 发送查询字符串之前逐步通过 JVM 并在最后一秒(如果他们绝对必须的话)编辑您的查询字符串来攻击您。 你在这个级别所做的一切都将是安全剧院,就像在机场被搜身一样,它不会让你变得更安全,但你可以说“但我们加密了”的可能性很小它!”在不可避免的安全漏洞之后,您的客户可能不会抛弃您。

    这个问题需要在数据库中解决,方法是创建一个不具有他们不应该拥有的权限的用户帐户。当您执行SHOW GRANTS FOR enduser@'%' 时,它只会向您显示他们被允许执行的查询类型。

    在许多情况下,您希望为用户帐户提供比表上的 INSERT、SELECT 或 UPDATE 更细粒度的权限。例如,您可能有这样的逻辑“您可以添加到此表中,但前提是您还更新了此其他表中的数字”。对于这些,您应该使用存储过程,它们的权限可以设置为“定义者”或“调用者”:由具有适当权限的用户定义它,然后调用者获得执行此特定查询的高级权限。

    在某些情况下,您希望将同一个应用程序分发给两个不同的客户端,但它们都将从能够读取彼此的数据中获得显着的好处(以牺牲另一个为代价!)。例如,您可能是与两家竞争对手公司打交道的订单处理者;任何一个都希望看到另一个的订单历史。对于这些情况,您有几个选择:

    1. 甚至将 SELECT 语句移动到存储过程中。存储过程可以调用 user(),它仍然可以为您提供登录用户,即使他们不是定义者。
    2. 将数据库查询移出共享 JAR。就像上面 @g-lulu 所说的那样,您可以创建一个您可以很好地锁定的 Web API,或者类似的东西。
    3. 复制数据库,将身份验证参数移动到您在启动时读取的单独文件中。

    选项 3 要求您编写工具来维护多个数据库作为彼此结构的完美副本,这很糟糕。然而,与 (1) 和 (2) 相比,共享数据库不可避免地会泄漏 一些 信息——例如 auto_increment ID 列可能会泄漏全局创建的订单数量,并且可能有确定类似的方法,“哦,他们通过这个不寻常的表访问发送所有订单,所以这也会同时碰撞这个 ID,所以我只需要检查两个 ID 是否都被碰撞了透露我们的竞争对手公司的订单”。

    【讨论】:

      【解决方案2】:

      您可以在 PHP(或 java 或其他)中创建 web 服务。该网络服务存储在服务器上,他包含对您的数据库的访问和查询。 使用您的桌面应用程序,只需向您的 Web 服务发送请求(POST、GET)。 PHP web 服务中的示例:

      if (isset($_POST['getMember'])){
      do a query in your database
      insert result into JSON
      return JSON
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多