3

我有一个需要连接到数据库的 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 文件中?如果没有,那么这种事情是否有最佳实践?

在此先感谢您的帮助。

4

3 回答 3

5

根据定义,存储在WEB-INF文件夹中的文件无法从外部世界访问。例如,如果您将 JSP 文件放在那里,则没有用户可以直接访问该文件 - 例如,可以通过从另一个 JSP 导入或包含来引用它。

话虽如此,您的凭据是安全的,但在applicationContext.xml. 您是否将这些凭据推送到源代码控制?

.properties最安全的方法是在硬盘上某处的外部文件中提取敏感且经常更改的配置。Spring 完全能够读取.properties文件。

于 2012-06-06T20:30:21.053 回答
2

要考虑的另一件事是进行 JNDI 查找。JNDI 将包含在 servlet 容器(在您的情况下为 tomcat)中,仅允许通过当前从 Tomcat 部署的 webapp 连接到数据库。

这种方式还在构建管理和开发之间创造了一种孤立的体验,所以如果你明白我的比喻,开发就没有汽车的钥匙。

于 2012-06-06T20:59:33.277 回答
1

你可以让它在启动时询问密码。但通常我看到的是 xml 文件中的密码,这些密码经过 chmodded 和 chowned,只能由 Web 软件本身访问。没有简单的好解决方案。

一个基本步骤是确保 tomcat 用户只有它需要的访问数据库的权限,所以如果它被入侵,损害是有限的。

于 2012-06-06T20:28:31.873 回答