0

私はサーブレットと JSP の世界を探求し始めており、ログイン システムの作成に成功しました。しかし、その実装は私が例外としていたほど完璧ではありません。

シナリオ:

1> ユーザーは、index.jsp にユーザー名とパスワードを入力します。

2> リクエストがサーブレット (login.login.java) に送信されます

3> サーブレットはデータベースに接続し、ユーザーが有効かどうかを確認します。(LoginBean.java 、LoginDB.java および GetConnection.java を使用、つまり Bean クラス、Database QueryClass および DB 接続クラス resp を使用)

4> ユーザーが認証された場合、

5> ユーザーは home.jsp にリダイレクトされます

そうしないと

Error.jsp (これは、いくつかのメッセージが追加された index.jsp の単なるレプリカです)

問題:

1> ブラウザで index.jsp を開き、URL を home.jsp に変更すると、サーブレットをバイパスできます。

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");
   }
%>

これにより、URL スニッフィングが修正されますが、有効なユーザーが home.jsp にリダイレクトされなくなります。

アップデート:

JB Nizet が提案したように、これにフィルターを実装しようとしています。しかし、私が言ったように、私は学習者なので、これを達成する方法についてはよくわかりません:

doFilter メソッドで何をする必要がありますか?

ServletRequest オブジェクトを HttpRequest オブジェクトに変換しました

使用して

HttpServletRequest req = (HttpServletRequest) リクエスト;

このreqオブジェクトを使用して、ユーザーが実際にsumbitボタンをクリックしたり、サーブレットをバイパスするためにURLを直接変更したりするにはどうすればよいですか?

申し訳ありませんが、これは非常に初歩的であるに違いありませんが、私はこれについて何時間も頭を悩ませています。私を助けてください

よろしく

Genocide_Hoax

4

1 に答える 1

1

使用しないでくださいSession.isNew()。セッション処理と認証は2つの異なるものです。認証されていないユーザーは、新しいセッションを持たない可能性があります(また、そうなります)。

アプリケーションに送信されるすべてのリクエストをインターセプトするサーブレットフィルターを使用する必要があります。このフィルターは、要求されたURLが認証を必要とするかどうかをチェックする必要があります。その場合、現在のユーザーが認証されていない場合は、ログインページにリダイレクトする必要があります。

認証されたら、セッションにユーザーIDを保存する必要があります。これにより、認証されたセッションと認証されていないセッションを区別できるようになります。そして、それはまた、アプリケーションで現在のユーザーを取得できるようにするものでもあります。

もちろん、認証が必要なURLのセットにログインURLを含めないようにしてください。

フィルタは、すべてのページで認証をチェックするよりもはるかに安全でクリーンです。これにより、物事が一元化され、同じコードを何度も繰り返さないようになり、一部のページに必要なチェックを追加するのを忘れるリスクがなくなります。

また、Javaの命名規則を尊重してください。メソッドは、Javaでは小文字で始まります。

于 2013-03-15T12:02:51.283 に答える