闲来无事打开编译后的class文件看看,赫然发现数据库的连接字符串、用户名和密码已文本的方式呈现着,连反编译工具都不需要。然后赶紧上网搜索这方面的资料,找到一篇名为《关于JSP源码泄漏问题的总结分析》,里面提到一段:“更大的安全问题是,有的软件开发人员把数据库的用户名密码都写在了java代码中,现在一反编译谁都能看到数据库的重要信息。通过数据库的远程连接功能,可以轻松的进入到数据库中,所有信息将全部被别人掌握。”那么请问各位同好,数据库名和密码可以不写入源代码吗?那么通过什么方式连接数据库呢?

解决方案 »

  1.   

    添加混淆器,可以解决一部分。另外,用户名和密码是不应该写到java代码中的。
      

  2.   

    首先是人家怎么获取的你class,你的class是放在服务器端的
      

  3.   

    把用户名和密码放到数据库。不要写死到java类中。
      

  4.   

    一般的项目里,数据库连接等配置信息不放在java源文件里,这是出于易用性考虑,换个数据库不需要修改java源文件,不需要重新编译。至于安全性问题,可以考虑在配置文件中存放加密过的密码等信息,程序读入后解密然后使用。加密需要用可逆的算法,比如DES、3DES、AES等
      

  5.   

    一般来说,程序的数据连接字符串都是写在XML文件里去的,而数据库里的敏感数据又都是用一些诸如MD5,DES加密,所以是很相对安全的
      

  6.   

    数据库信息也放在asp文件中,首先人家怎么下载到你的asp文件。class也是如此
      

  7.   

    该问题很滑稽:1、人家是怎么获得程序的CLASS文件的,没有CLASS,如何反编译;你能获取别人的CLASS文件吗?你闲来无事,你是反编译你自己的CLASS文件吧;
    2、关于密码问题,一般都是采取密码加密,不知道加密方法,就很难知道密码了。
      

  8.   

    写在XML里面呀.发布或者公布的时候,可以直接去掉xml里面的东西就可以了.
      

  9.   

    这个问题不太合理
    1.当应该发布的时候,所有class文件是执行在服务器端,你所说的反编译class是不是有些问题,你是否要先破译服务器?才能得到class文件?不要忘记了,你自己在家做实验的时候,自己又充当服务器,又充当浏览者。。
      

  10.   

    如果你是担心数据库的安全问题,则很简单
    1. 连接数据库信息通过配置文件,现在流行的框架都是这种方法;
    2. 确保数据库分配了正确的权限,特别是访问源权限,开启OS防火墙;如仅充许localhost访问或指定IP访问,同时设置OS系统的数据库端口如mysql3306防火墙规则;
       如果这台服务器是安全的,则其他人无法直接访问你的数据库。如果你是担心JAVA源代码安全,其实根本不用考虑
    1. 担心谁看呢?
    2. JAVA代码的优秀的项目一堆一堆的,看那些比较有意义; 
      

  11.   

    数据库服务器应该不会放在外网 IP 上的,一般都是放在内网上的,比如 10 网段,或者 192.168 网段上。就算直接告诉你,我的数据库服务器地址是 10.0.0.241 端口号是 1521,用户名是 oracle 密码是 oracle,你又能怎么样呢?
      

  12.   

    多谢各位指点,最近刚学JSP,看到几个资料都是关于源码泄露的,作者的心情也比较迫切,看来这样的情况还是会出现,只是几率很低罢了,呵呵。