簡體   English   中英

提供MySQL JDBC驅動程序密碼的最佳實踐

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM