我有一个Spring MVC Web应用程序需要连接到数据库,并且数据源凭证当前(正在开发中)保存在应用程序上下文配置文件中,即在WEB-INF \ spring \ application_context.xml中这样:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="username" value="my_username" />
<property name="password" value="my_password" />
<property name="url" value="my_datasource_url" />
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
</bean>
在将此应用程序部署到面向Tomcat服务器的公共服务器之前,我想确保我不会让这些数据库凭据对全世界可见或者由狡猾的黑客轻易发现。我可以保持原样,即纯文本和WEB-INF下的XML文件吗?如果没有,那么这种事情是否有最好的做法?
提前感谢您的帮助。
答案 0 :(得分:5)
根据定义,存储在WEB-INF
文件夹中的文件无法从外部世界访问。例如。如果你把JSP文件放在那里没有用户可以直接访问该文件 - 例如可以通过导入或包含来自另一个JSP来引用它。
据说你的凭据是安全的,但在applicationContext.xml
中对它们进行硬编码并不是一个好习惯。您是否将这些凭据推送到源代码管理中?
最安全的方法是在硬盘上某处的外部.properties
文件中提取敏感且频繁更改的配置。 Spring完全有能力阅读.properties
个文件。
答案 1 :(得分:2)
要考虑的另一件事是进行JNDI查找。 JNDI将包含在servlet容器中(在您的情况下为tomcat),只允许通过当前从Tomcat部署的Web应用程序连接到数据库。
这种方式还可以在构建管理和开发之间创建一个孤岛体验,因此如果你得到我的隐喻,开发就没有汽车的关键。
答案 2 :(得分:1)
你可以让它在启动时询问密码。但通常我所看到的是xml文件中的密码,这些密码是chmodded和chowned只能由Web软件本身访问。没有简单的好解决方案。
一个基本步骤是确保tomcat-user仅具有数据库所需的访问权限,因此如果受到攻击,则损坏是有限的。