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

前端之家收集整理的这篇文章主要介绍了java – 如何在JAR文件中实现安全数据库连接?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我不是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保护它们.

您的应用听起来像我的经典客户端服务器.我有这个权利吗?

通常在客户端和数据库之间引入中间层以检查安全性,验证和绑定输入,以及将请求传递到适当的处理程序以进行实现.让用户在将中间层传递给数据库之前提供中间层必须验证的凭据.

它还可以为您提供针对sql注入攻击的战斗机会.

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

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

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

原文链接:https://www.f2er.com/java/437715.html

猜你在找的Java相关文章