[英]Best practice to provide MySQL JDBC driver password
我在Tomcat7
服务器中部署了JSP
Web应用程序,该应用程序使用MySQL
作为数据库。 在数据库连接中,我目前提供明文的用户名和密码,如下所示。
Connection conn = DriverManager.getConnection("jdbc:mysql://hostname:3306/schema", "user", "password");
作为安全性要求,我不能在代码中使用纯文本密码,也不能使用配置文件存储信息,因此所有内容都必须存储在某个地方的数据库中。
Q1关于此问题,我可以在连接字符串中为密码字段提供哈希输入吗?
Q2如果我不能使用基于文件的配置方法,那将是存储敏感信息的最佳方法。
最好的方法是在tomcat中定义JDBC数据存储,然后在您的Web应用程序中查找它。 以下示例是从tomcat 文档中无耻复制的。 这样,您的应用程序中将没有任何密码。 该配置由tomcat管理员完成,而不是由Web应用程序开发人员完成。
语境:
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest"/>
web.xml中
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
test.jsp的
<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>
的servlet
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection();
关于您的安全要求:这比较难,因为那里的密码也是纯文本的。 您可以限制访问权限,以便只有Web容器才能读取它。 加密密码不适用于对称密码,因为攻击者也可以获取它们。 非对称密码-他也可以获取解码密钥。 因此,您必须设置一个环境,使攻击者无法看到配置文件的内容。 如果他是根,反正一切都会丢失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.