[英]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.