2013-03-15 32 views
0

我開始探索Servlets和JSP的世界,併成功創建了一個登錄系統。但是它的實現並不像我所預期的那樣完美。登錄系統在更改URL時跳過Servlet驗證

塞納里奧:

1>用戶輸入在index.jsp的用戶名和密碼。

2>請求被髮送給Servlet(login.login.java)

3>該servlet連接到數據庫和檢查用戶是否是有效還是無效。 (使用LoginBean.java,LoginDB.java和GetConnection.java即豆類,數據庫QueryClass和DB連接類RESP)

4>如果用戶被驗證,

5>所述用戶被重定向到家.JSP

其他

error.jsp文件(這僅僅是一個index.jsp的副本添加了一些消息)

問題:

1>如果我在瀏覽器中打開index.jsp並將URL更改爲home.jsp,我可以繞過servlet。

2>如果我嘗試使用MD5(例如PASSWORD('mypass'))在mysql中存儲密碼,則不會進行身份驗證。

這是我的doPost方法


    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String user = request.getParameter("user"); 
     String pass = request.getParameter("pass"); 
     LoginBean bean = new LoginBean(); 
     bean.SetUser(user); 
     bean.SetPass(pass); 
     bean = LoginDB.check_login(bean); 
     if (bean.isValid()) { 
      HttpSession session = request.getSession(true); 
      session.setAttribute("currentSessionUser", user); 
      response.sendRedirect("home.jsp"); 
     } else { 
      response.sendRedirect("Error.jsp"); 
     } 
    } 

I tired to Modify my Home.jsp and check for a valid session before loading the page. Using the Following

<% 
    if(!session.isNew()) 
    { 
     response.sendRedirect("index.jsp"); 
    } 
%> 

此修復網址嗅探,但是它停止合法用戶被重定向到回到Home.jsp

UPDATE:

由於由JB Nizet推薦我試圖在這個上實現過濾器。但正如我所說我是一個學習者,所以我不太確定如何實現這一點:

我在doFilter方法中必須做什麼?

我轉換ServletRequest對象到的HttpRequest使用

HttpServletRequest的REQ =(HttpServletRequest的)請求對象

;

現在使用這個req對象我怎麼用戶實際上點擊了sumbit按鈕或者直接改變了URL來繞過Servlet?

對不起,這一定是非常基本的,但我現在正在爲此磨上幾個小時的頭。請幫我出

問候

Genocide_Hoax

+0

對於第一個問題,請檢查JSP中的會話值,第二個會發生什麼?更多詳細信息... – 2013-03-15 11:29:09

+0

你的意思是我需要在我的home.jsp加載時檢查會話屬性,如果未設置該值,則將用戶重定向到index.jsp。我厭倦了實現它,但都是徒勞的。你能幫我實現嗎? – 2013-03-15 11:32:07

+0

並針對第二個問題。我使用插入到用戶的價值('管理員',密碼('管理')我的價值存儲在數據庫中。我嘗試使用管理員登錄,管理它發送我到無效的登錄頁面,即我沒有得到身份驗證。如果我插入值插入到用戶值('管理','管理員')一切工作正常。 – 2013-03-15 11:34:36

回答

1

不要使用Session.isNew()。會話處理和認證是兩件不同的事情。未經身份驗證的用戶可以(並且將)擁有非新會話。

您應該使用一個servlet過濾器,它會攔截請求發送到您的應用程序。此過濾器應檢查請求的URL是否需要身份驗證。如果是這樣,並且如果當前用戶未被認證,則其應該重定向到登錄頁面。

一旦通過身份驗證,您應該將用戶身份存儲在會話中。這將允許區分認證會話和未認證的會話。這也將允許檢索應用程序中的當前用戶。

當然,請確保不要將登錄URL包含在需要驗證的一組URL中。

過濾器比在每個頁面中檢查驗證更安全和乾淨。它使事情集中化,避免一次又一次重複相同的代碼,並且沒有忘記在某些頁面中添加所需檢查的風險。

此外,請尊重Java命名約定。方法以Java中的小寫字母開頭。

+0

謝謝很多Nizet,但正如我所說,我是Servlet和JSP世界的新手,我不確定如何實現這一點。你可以請一些鏈接,我可以學習如何在我的應用程序中實現Servlet文件管理器。 – 2013-03-15 12:13:14

+0

谷歌是你的朋友谷歌對於「servlet過濾教程」,你會發現其中的幾個 – 2013-03-15 12:18:03

+0

是的我知道,但我希望能推薦一些東西 – 2013-03-15 12:20:27