当前位置: 首页 > 面试题库 >

通常如何在JAR文件中实现安全的数据库连接?

谭修竹
2023-03-14
问题内容

我不是Java开发人员,但是我的客户雇用了一位来更新其站点上的一些JAR文件。在此之前,我们审核了现有代码并发现了许多安全漏洞。我们使用的使文件更安全的解决方案之一是创建一个新的数据库用户,该用户具有对数据库的只读访问权限,并且仅针对需要操作JAR文件的那些表。然后,我发现他们将这些凭据与JAR文件一起存储在纯文本文件中,只是有根据的猜测,与公众无关。终于在今天,他们要求更宽松的数据库特权,但我认为她不了解她真的不应该为正确编写JAR文件而需要它们。

无论如何,我很确定这个开发人员如果在后面咬住她,就不会知道一个安全漏洞。而且我对Java / JAR文件的了解还不足以正确地向她建议她
该做什么,而对于infosec却只告诉她她 不应 该做什么。

那么在编写连接到远程MySQL数据库的分布式JAR文件时,典型的安全注意事项是什么?有加密连接详细信息(用户名和/或密码)的标准方法吗?IIRC,.jar文件不只是美化了ZIP归档文件,因此没有人不能解压缩该文件并查看源代码中的连接详细信息吗?有没有办法加密jar文件的内容?

更新:我收到了开发人员的以下澄清。听起来对吗?

jar文件中的所有类均已加密。在将它们归档到jar文件中之前,我总是对所有的类文件进行加密。如果打开任何[已编辑]
jar,则只会看到加密代码。因此,用户没有机会通过反编译分类来查看源代码。这些类确实使用jdbc连接到数据库,搜索引擎需要连接到数据库以运行sqls。这些sqls在jar文件中的加密小节中。

当我问您有关加密数据库密码的问题时,我的意思是您在下面说的话。我们将用Java编写加密/解密代码并使用它。来自源代码的编译类将再次作为reoutine类加密过程的一部分进行加密。我们使用称为Retroguard的Java模糊处理工具对所有类进行加密。我们还在html页面中嵌入了一个密钥,以确保该应用程序仅在从[已编辑]网站下载后才能运行。如果用户将jar复制到他的本地计算机上并尝试运行它,它将失败。


问题答案:

是的,JAR只是ZIP文件,因此完全可以使用WinZip打开其中一个文件并查看其内容。如果您知道自己在做什么,则可以在其中找到纯文本密码。

听起来您的JAR包含直接连接到数据库的客户端。您没有说这是通过Internet还是VPN或LAN完成的。数据库是从客户端远程部署的吗?

这是客户端/服务器应用程序消失的原因之一:很难通过Internet保护它们。

您的应用对我来说听起来像是经典的客户端服务器。我有那个权利吗?

通常在客户端和数据库之间引入中间层,以检查安全性,验证和绑定输入,并将请求传送到适当的处理程序以实现。让用户提供您的中间层必须验证的凭据,然后再将其传递给数据库。

它还可以为您提供对抗SQL注入攻击的机会。

如果对JAR内容进行加密,则必须编写一个自定义类加载器,以在加载时对其解密。不是为了胆小的人。

如果您的客户端是Swing应用程序,并且所有逻辑和数据库内容都内置在侦听器和事件处理程序中,并且为每个组件注册,那么您将需要进行认真的重写。您将转向更多的面向服务的体系结构,其中所有工作都由服务器端的服务完成。客户端仅执行经典MVC中应做的事情:将事件传递到服务器端并显示结果。您的客户会轻松很多。

这将对您的开发团队和业务造成最大的冲击。



 类似资料:
  • 问题内容: 我目前正在为我教会的大学团体使用一个网站,并且开始对我所写内容的安全性有些担心。例如,我使用以下功能: 每当我进行某种查询时就连接到数据库。我总是使用PDO准备好的语句来防止任何用户输入的SQL注入,并且我使用htmlspecialchars进行转义,然后再输出。我的问题是: 如何保护数据库的用户名和密码? 我不知道是否有人可以查看我的PHP文件的源,但如果可以,我只能想象我会被缠住。

  • 问题内容: 我不知道如何 在 Java .jar文件中包括一个SQLite数据库以进行部署(通过Java WebStart)。 数据库并 没有 需要在运行时更新中…它本质上是一个华而不实的配置文件。 顺便说一下,使用Eclipse。 问题答案: 要考虑的另一个不错的选择可能是derby,javadb。它现在已与Java捆绑在一起,并且安装速度非常快,并且具有良好的性能。 问候,斯特凡

  • 如何在Firebase实时数据库中设置安全规则? 我得到了这个信息。 您选择以测试模式开始开发,这将导致您的Cloud Fi还原数据库完全发布在Internet上。您的应用程序更容易受到攻击,因此您的Fi还原安全规则已设置为在头30天后停止接收任何请求。 系统将开始拒绝发送到Firestore数据库的所有客户端请求。在此之前,请编写高强度的安全规则,以便应用程序能够正常运行,同时正确保护您的数据。

  • 问题内容: 我正在编写一个Servlet,该Servlet通过访问和修改数据库中的某些表来处理每个请求。我希望与数据库的连接是线程安全的。我不想为此使用已经存在的库/框架(spring,hibernate等)。 我知道我可以通过以下方式为此使用java的ThreadLocal: 每次调用时,新连接都会添加到对象中,然后在释放连接时将其删除。 这是这样做的正确方法,还是它本身应该扩展类?还是有一种更

  • 问题内容: 我用记事本创建了一个项目,并且在mysql服务器数据库的cmd中运行良好。 但是在创建相同项目的jar文件之后,jar文件将无法连接到服务器数据库。所以不知道下一步该怎么做?从cmd或jar文件运行后,即使其他系统(仅安装了Java而不是mysql)也无法连接到服务器数据库。 每个系统是否都必须在其他系统上安装java和mysql才能运行?如何克服这样的问题。我想将其分发给用户,但是我