我不是Java开发人员,但我的客户已经雇佣了一个人来更新他们网站上的一些JAR文件。在此之前,我们审核了现有的代码并发现了一些安全漏洞。我们用来使文件更安全的解决方案之一是创建一个新的数据库用户,该用户对数据库具有只读访问权限,并且只对那些需要JAR文件操作的表创建。然后,我发现他们将这些证书以JAR文件的形式存储在纯文本文件中,只是远离公众的教育猜测。最后,今天他们要求更宽松的数据库特权,但我不认为她理解她真的不应该需要它们来获得正确书写的JAR文件。通常如何在JAR文件中实现安全的数据库连接?
无论如何,我敢肯定,这个开发者不知道一个安全漏洞,如果它在背面咬着。我不知道有足够的了解的Java/JAR文件才能正常劝她什么,她应该做,只有足够的了解信息安全告诉她什么,她不应做。
所以写一个连接到远程MySQL数据库的分布式JAR文件时有哪些典型的安全注意事项?有没有一种标准的方式来加密连接细节(用户名和/或密码)? IIRC,是不是.jar文件只是赞美ZIP压缩文件,并不能解压文件和查看源代码中的连接细节?有没有加密jar文件内容的方法?
更新:我收到了以下开发者的澄清。这听起来正确吗?
所有jar文件中的类encrypoted。在将它们归档到jar文件之前,我总是加密所有的类文件。如果你打开任何[压缩]的jar,你只会看到加密的代码。因此用户无法通过反编译来查看源代码。类使用jdbc连接到数据库,搜索eangine需要连接到数据库以运行sqls。这些sqls位于jar文件中的加密分类中。
当我问你关于加密DB密码的问题时,我的意思是你在下面说的。我们将在java中编写加密/解密代码并使用它。作为reoutine类加密过程的一部分,源代码中的编译类将再次得到加密。我们使用称为Retroguard的Java混淆工具来加密所有的类。我们还在html页面中嵌入了一个关键字,以确保该应用程序仅在从[redacted]网站下载的情况下才能使用。如果用户将jar复制到本地机器并尝试运行它,它将会失败。
您的数据库系统支持哪些登录选项?它支持使用签名密钥(la SSH)而不是用户/密码?在环境中是否有其他身份验证机制(LDAP,AD,PAM)可用于代替数据库身份验证? – Freiheit 2010-09-07 16:17:47
如果你加密细节,那么你将需要在客户端解密它们。游戏结束。然后你可能会把它们发送到网络上 - 这意味着对手不需要麻烦安装Java。 – 2010-09-07 16:39:15
谢谢汤姆,我没有考虑到最终结果胜过了我们在设计中实现的任何安全性。这个特定的mysql用户具有只读访问权限,所以我几乎想要说:“好吧,至少如果他们能够确定连接参数,他们就不能改变数据”,但是我对此感觉不太好它从长远来看。 – 2010-09-07 17:35:04