gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:01 25 4
gpt4 key购买 nike

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

无论如何,我很确定这个开发人员不会知道安全漏洞,如果它在背后咬她。而且我对 Java/JAR 文件的了解还不够多,无法正确地建议她应该做什么,我对 infosec 的了解也不足以告诉她她不应该做什么做。

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


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

All the classes in the jar file are encrypoted. i have always encrypted all the class files before archiving them in a jar file. if you open any [redacted] jar, you will only see encrypted code. so there is no chance for a user to be able to view the source code by decompiling the classed. the classes do use jdbc to connect to the db, the search eangine needs to connect to the DB to run sqls. these sqls are in teh encrypted clasees in the jar file.

when i asked you about the encrypting the DB password, I meant what you say below. we will write an encryption/decription code in java and use it. Thecompiled class from this source code will again get encrypted as part of the reoutine class encryption procedure. We use a Java obfuscation tool called Retroguard to encrypt all the classes. we also embed a key in the html page to make sure that the application will work only if it has been downloaded form [redacted] website. if the user copies the jar to his local machine and tries to run it, it will fail.

最佳答案

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

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

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

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

通常在客户端和数据库之间引入一个中间层来检查安全性、验证和绑定(bind)输入,以及将请求传送到适当的处理程序以实现。让用户出示您的中间层在将它们传递到数据库之前必须验证的凭据。

它还可以让您有机会抵御 SQL 注入(inject)攻击。

如果您加密 JAR 内容,则必须编写自定义类加载器以在加载时解密它们。不适合胆小的人。

如果您的客户端是一个 Swing 应用程序,所有逻辑和数据库内容都内置到为每个组件注册的监听器和事件处理程序中,那么您将面临严重的重写。您将更多地转向面向服务的架构,其中所有工作都由服务器端的服务完成。客户端只做它在经典 MVC 中应该做的事情:将事件传递到服务器端并显示结果。你的客户端会轻很多。

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

关于java - 安全数据库连接通常如何在 JAR 文件中实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3660154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com