2014-09-04 35 views
0

我正在一個webprojekt工作,我爲了最大限度地減少會話膨脹,主要使用ViewScoped bean。但後來我面臨的問題是我需要在我的bean之間傳輸客戶端用戶名和密碼(以訪問數據庫等)。如何在ViewScoped bean之間傳輸祕密用戶名和密碼?

我已經在那裏我使用Flash對象傳遞豆之間的用戶名和密碼,如這樣的系統:

public String gotoNextView() { 
    ExternalContext external = FacesContext.getCurrentInstance().getExternalContext(); 
    external.getFlash().put("user_name", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("user_name")); 
    external.getFlash().put("password", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("password")); 

    return "/../../next_view.xhtml"; 
} 

但我擔心這是否是某種可能被黑客操縱客戶端從而欺騙服務器以暴露Flash對象!

我正在考慮的另一個解決方案是將Web應用程序的所有JSESSIONID作爲鍵存儲在Map中,並將用戶名和密碼作爲值存儲。爲了做到這一點,我想我需要在用戶會話結束或過期時調用回調方法,以便我可以從Map中刪除相關的JSESSIONID。但是這個解決方案的問題是我不確定實現回調的最佳方式是什麼,這樣我就可以100%確定在服務器創建一個新的類似的JSESSIONID之前Map條目被移除了(儘管我知道在這麼短的時間內發生的機會非常小)。另外,我對使用JSESSIONID(用戶)的bean有什麼疑問,如果由於某種原因,服務器在bean(例如數據庫操作)完成之前丟棄了JSESSIONID(因爲我可能會冒一個新的類似的JSESSIONID是由服務器爲另一個用戶創建的,然後可能會與JSESSIONID混合並且其他bean正在服務用戶)。

我希望對問題有深入瞭解的人會寫出什麼是最佳實踐和100%安全的方法(同樣,我想大多數使用JSF webapp服務器的人都會遇到此問題,因此它會是有助於他人瞭解問題的最佳解決方案)。謝謝。

+0

你不應該存儲密碼***之前的任何地方加密你的東西(考慮開銷),***甚至沒有在會議或請求範圍內。應用程序應該自己訪問數據庫,而不是用戶。 – EJP 2014-09-04 10:36:59

+0

是否有一個原因,你不想使用會話屬性的用戶名?在會議中只保留這些信息會使會議保持較小的狀態,並避免所有問題。 – 2014-09-04 10:39:09

+0

@Martin Frey:你在談論使用HttpServletRequest和HttpServletResposne對象嗎?我只是不知道該怎麼做! – 2014-09-04 13:00:52

回答

1

我想你在這裏有一個誤解。變量駐留在一個託管bean中,然後「傳遞」給另一個託管bean的事實並不意味着物理介質上存在實際的移動。所有viewcoped bean都在相同的存儲區域中實現(我相信這是UIViewRoot對象)。 在這個級別上,這些實體之間有一個隱含的Boundary of Trust,除非兩個bean(可能是客戶端變量,URL參數或其他HTTP工件)之間存在用戶可訪問的移動,否則我沒有看到風險。

這意味着什麼,無論變量所在的具體@ViewScoped bean是什麼,它們都暴露在相同的漏洞(如果有的話)。在豆類之間「傳遞」一個變量不會帶來任何新的風險。除非您向用戶顯示任何值(可能位於URL或隱藏的HTML表單元素中),否則@ViewScoped對象本身並沒有引入新的風險(不恰當地使用範圍是另一回事)。

最後,如果你仍然在意,只是變量遞給另一個實體

+0

感謝您的回覆。我明白這一切都發生在Servlet內部,因爲'它全部'被編譯成Servlet。我只是想知道是否有辦法欺騙服務器來暴露它的bean屬性和flash對象(我的經驗是,有時黑客有時可以做的很有創意,超越'普通'概念)。據我所知,除非整個服務器受到攻擊,否則黑客不可能'進入'一個bean,然後所有的解決方案都將失敗!但是,也許使用Spring安全性或其他方法可以更好地解決問題? – 2014-09-04 19:01:50

+0

只是爲了讓我的問題更清楚,那麼我的意思是黑客入侵到bean或flash對象,是否可能創建某種高級的GET或POST請求來訪問bean屬性或flash對象!我需要最偏激的'JSF相關安全系統! – 2014-09-04 19:30:50

+0

我也在想,也許一些DDoS攻擊或緩衝區溢出攻擊可以使Servlet做出可能暴露bean屬性和/或flash對象的意想不到的東西。或者,也許黑客可以做的任何事情都可能會破壞我的JSF webapp! – 2014-09-04 19:44:12