我开始探索 Servlets 和 JSP 的世界,并成功创建了登录系统。但它的实现并不像我想象的那么完美。
塞纳里奥:
1> 用户在 index.jsp 中输入用户名和密码。
2> 将请求发送到Servlet(login.login.java)
3> servlet 连接到数据库并检查用户是否有效。(使用 LoginBean.java 、 LoginDB.java 和 GetConnection.java 即一个 bean 类、 Database QueryClass 和 DB connection Class resp)
4> 如果用户被验证,
5> 用户被重定向到 home.jsp
别的
Error.jsp(这只是 index.jsp 的副本,添加了一些消息)
问题:
1> 如果我只是在浏览器中打开 index.jsp 并将 URL 更改为 home.jsp,我可以绕过 servlet。
2> 如果我尝试使用 MD5 将密码存储在 mysql 中,即 PASSWORD('mypass') 我没有通过身份验证。
这是我的 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");
}
%>
这修复了 URL 嗅探,但它阻止了有效用户被重定向到 home.jsp
更新:
正如 JB Nizet 所建议的那样,我正在尝试对此实施过滤器。但正如我所说,我是一名学习者,所以我不太确定如何实现这一目标:
我必须在我的 doFilter 方法中做什么?
我将 ServletRequest 对象转换为 HttpRequest 对象
使用
HttpServletRequest req = (HttpServletRequest) 请求;
现在使用这个 req 对象,我用户如何实际单击 sumbit 按钮或直接更改 URL 以绕过 Servlet?
对不起,这一定是非常初级的,但我现在已经为此思考了好几个小时。请帮帮我
问候
Genocide_Hoax