使JSP登录表单更安全

时间:2015-12-11 20:33:29

标签: java jsp security login

我正在使用Eclipse开发我的第一个网站,即使我还没有看到IDE的任何需求。它是创建的登录表单,我认为由于使用PreparedStatement而无法注入。我想知道是否还有其他任何方式我可以通过简单的步骤使其安全,以及我现在拥有的algorythm的缺点是什么。所以,这是代码:

的login.jsp

<form action="log.jsp">
    <input type="email" placeholder="email" name="userMail"/>
    <input type="password" placeholder="Password" name="userPassword" />
<span>
    <input type="checkbox" class="checkbox"> 
    Keep me signed in
</span>
    <button type="submit" class="btn btn-default">Login</button>
</form>

log.jsp

<%@ page import ="java.sql.*" %>
<%
    String userMail = request.getParameter("userMail");    
    String userPassword = request.getParameter("userPassword");
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/book_store", "root", "daters");
String sql = "SELECT * FROM users WHERE userMail=? AND userPassword=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, userMail);
ps.setString(2, userPassword);
System.out.println(sql);
ResultSet rs = ps.executeQuery();
 if (rs.next()) {
        session.setAttribute("userMail", userMail);
        response.sendRedirect("index.jsp");
    } else {
        out.println("Invalid password <a href='index.jsp'>try again</a>");
    }
%>

2 个答案:

答案 0 :(得分:2)

既然你说这是你的第一次尝试,大概你想要变得更好 - 这里有几点要注意。

a)设计模式 - MVC  JSP是MVC的V部分 - 你的程序是MV和C都归为一个大V。

b)一旦你开始创建模型,你可以在那里应用额外的验证 - 空检查等。

c)您最终需要坚持用户登录的事实,并在其他请求中使用该信息。

答案 1 :(得分:1)

您可能想要改进的另一件事:

  • 不要将密码存储为明文。使用安全单向哈希码并比较哈希值。

示例代码:

MessageDigest digest =    MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));