我開始探索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
對於第一個問題,請檢查JSP中的會話值,第二個會發生什麼?更多詳細信息... – 2013-03-15 11:29:09
你的意思是我需要在我的home.jsp加載時檢查會話屬性,如果未設置該值,則將用戶重定向到index.jsp。我厭倦了實現它,但都是徒勞的。你能幫我實現嗎? – 2013-03-15 11:32:07
並針對第二個問題。我使用插入到用戶的價值('管理員',密碼('管理')我的價值存儲在數據庫中。我嘗試使用管理員登錄,管理它發送我到無效的登錄頁面,即我沒有得到身份驗證。如果我插入值插入到用戶值('管理','管理員')一切工作正常。 – 2013-03-15 11:34:36