2011-06-15 28 views
0

jsp LoginまたはSession()では、セッションに入れた方がUsernameまたはIdですか?JSPでIdまたはUsernameで表示されるメッセージ

サーブレットまたはouther JSPページでテストしますか?

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を置いて、すべてのプロパティに即座にアクセスできるようにし、通常はサーブレットでこれを行います。

@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について読む。

最後に、DBリソースがすべて不足している場合にアプリケーションが長期間クラッシュする可能性があるため、JDBCリソースを適切に閉じるブロックがありません。

+0

ありがとう、先生はSQLインジェクションのために使いやすい瓶がありますか? – David

+1

いいえ、 'Statement'の代わりに' PreparedStatement'を使用してください。私が "prepared statements"の背後にある答えに入れたリンクも見てください。 – BalusC

関連する問題