2011-06-15 40 views
0

在jsp Login或Session()中,最好在會話中輸入用戶名或ID?在JSP中使用Id或用戶名

並且我測試了一個servlet還是一個outher jsp頁面?

IM使用在outher jsp頁面的代碼,但我認爲是不是安全

<%if(session.getAttribute("username") == null){%> 
<% 
String err ; 
Connection cnn; 
    Class.forName(System.getProperty("database.driver","com.mysql.jdbc.Driver")); 
cnn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sondage","root", ""); 
    Statement stat1 = cnn.createStatement(); 

    String Username,Password; 

    Username=request.getParameter("UserName"); 
    Password=request.getParameter("passWord"); 

    //Le nomre de produits 
ResultSet resultat = stat1.executeQuery("select * from utilisateur where username ='"+ Username +"' and password = '"+Password+"'"); 
if (resultat.next()) { 

session.putValue("username",Username); 

    RequestDispatcher rd =request.getRequestDispatcher("vote.jsp"); 
    rd.forward(request, response); 

} 
else { 
    RequestDispatcher rd =request.getRequestDispatcher("authentification.jsp?err=1"); 
    rd.forward(request, response); 
    } 
    %> 

回答

2

這一切都取決於你。我個人只是把一個代表User實體的Javabean放在那裏,以便我可以即時訪問它的所有屬性,我通常在一個servlet中執行此操作。

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    User user = userDAO.find(username, password); 

    if (user != null) { 
     request.getSession().setAttribute("user", user); 
     response.sendRedirect("userhome"); 
    } else { 
     request.setAttribute("message", "Unknown login, try again"); 
     request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); 
    } 
} 

只有幾個東西涌出來怪異/不安全:

<%if(session.getAttribute("username") == null){%> 

爲什麼這個檢查?用戶是否被允許作爲另一個用戶重新登錄?你應該爲此使用Filter

ResultSet resultat = stat1.executeQuery("select * from utilisateur where username ='"+ Username +"' and password = '"+Password+"'"); 

這是一個SQL injection洞。請閱讀約SQL injection attacksprepared statements

最後,我錯過了finally塊,其中您正確關閉了JDBC資源以防止它們泄漏,這可能會導致應用程序在數據庫用盡所有資源時長期崩潰。

+0

謝謝,先生是否有任何易於使用的SQL注入jar? – David 2011-06-15 20:00:01

+1

編號只需使用'PreparedStatement'而不是'Statement'。另請參閱我在「準備好的陳述」背後的答案。 – BalusC 2011-06-15 20:01:02

相關問題