2009-10-15 29 views
0

背景安全與JSP /的JavaBeans/Servlet的/ MySQL的

HTML頁面,要求用戶輸入自己的用戶名和密碼。這些是MySQL數據庫的憑證(即它們將用於JDBC連接,因此沒有密碼物理存儲在文件中)。

在提交一個將嘗試連接到數據庫的servlet將被調用。如果可以,憑證是正確的,並且將加載一個JSP頁面。如果不是,則會顯示錯誤。

如果登錄成功,則Web應用程序將使用servlet執行數據庫上的SQL查詢/更新並將Java Beans返回給JSP頁面。

問題

對於內存而言我猜JDBC將需要關閉意味着後續頁面將需要重新啓動使用之前提供的憑據的連接。很明顯,用戶不希望每次都提供密碼,因此無論如何都必須存儲密碼。如果它們存儲在該會話的Java對象/ bean中(考慮到它必須是明文的,所以它可以被檢索和使用)......它們是否容易受到攻擊?這只是一個不好的,因爲它存儲在代碼中的文本?

我假設有人可以進入會話,並調用對象(如果他們知道這一點?)與細節在和瞧?

還有什麼替代方法?

回答

0

由於開始一個新的連接非常昂貴,連接保存在會話中。因此,後續頁面將獲得相同的連接對象。

至於安全性:這與您的網絡服務器一樣安全。如果某人可以訪問主機並以運行網絡服務器的用戶身份登錄,或者以root身份登錄,則可以訪問該進程。

儘管JDBC驅動程序並不保存它們(除非使用全局數據源,否則它不會),但這並不能使用戶訪問憑據。他們可以嘗試調用連接對象上的方法,但這相當於黑客正在運行的Java虛擬機,除非無法安裝所有可用的安全更新,否則很難做到這一點。

+0

感謝您的快速響應。在這種情況下,假定服務器是安全的(即其它安全應用程序運行它),並且將使用SSL。所以我認爲這很好。 愚蠢的後續行動 - 我如何將連接對象保存到會話中,並將其傳遞給響應?或者這只是一個給定的? – ajr

+0

HttpServletRequest對象可以爲您提供一個Session對象,您可以在其中存儲任何您喜歡的對象。請參閱http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28%29 –