0

指定された試行が失敗した後、ユーザーをブロックする方法を教えてください。30 分後、またはいつでも、ユーザーは再度ログインできるようになります。ログイン用のサンプル コードを次に示します。

public partial class Login : System.Web.UI.Page
{
    SimplerAES AES = new SimplerAES();
    protected void Page_Load(object sender, EventArgs e)
    {
        Session.Clear();
    }
    protected void btnLogIn_Click(object sender, EventArgs e)
    {

        if (txtUsername.Text == "" || txtPassword.Text == "")
        {
            lblMessage.Visible = true;
            txtUsername.Text = "";
            txtPassword.Text = "";
            lblMessage.Text = "Invalid Username/Password";
        }
        else
        {
            SqlConnection con = new SqlConnection(SeiboLMS.Helper.GetConnectionString());
            con.Open();

            SqlCommand com = new SqlCommand();
            com.Connection = con;
            com.CommandType = CommandType.Text;

            com.CommandText = "SELECT * FROM Users WHERE UserName=@UserName";

            com.Parameters.Add("@UserName", SqlDbType.NVarChar);
            com.Parameters[0].Value = txtUsername.Text;

            SqlDataReader data = com.ExecuteReader();

            if (data != null)
            {
                while (data.Read())
                {
                    if (txtPassword.Text == AES.Decrypt(data["Password"].ToString()))
                    {
                        if (data["UserTypeID"].ToString() == "1")
                        {
                            Session["userid"] = data["UserID"].ToString();
                            Session["usertypeid"] = data["UserTypeID"].ToString();
                            Session["username"] = data["UserName"].ToString();
                            Session["password"] = data["Password"].ToString();
                            Helper.Logs(int.Parse(data["UserID"].ToString()), 1, "Log In Successful");
                            Response.Redirect("Admin/Default.aspx");
                        }
                        else
                        {
                            Session["userid"] = data["UserID"].ToString();
                            Session["usertypeid"] = data["UserTypeID"].ToString();
                            Session["username"] = data["UserName"].ToString();
                            Session["password"] = data["Password"].ToString();
                            Helper.Logs(int.Parse(data["UserID"].ToString()), 1, "Log In Successful");
                            Response.Redirect("Employees/Default.aspx");
                        }

                    }
                    else
                    {
                        lblMessage.Text = "Invalid Username/Password.";
                        txtUsername.Text = "";
                        txtPassword.Text = "";
                    }
                }
            }
            else
            {
                lblMessage.Text = "Invalid Username/Password.";
                txtUsername.Text = "";
                txtPassword.Text = "";
            }

            data.Close();
            con.Close();
            con.Dispose();
        }
    }
}

そこにどんなアイデアがあるか教えてください。前もって感謝します..

4

3 に答える 3

3

この質問には何度も答えられています。

試行に失敗したC#ログインを検索する

この特定の質問は非常に似ています。 ログイン-3回のみ許可

ウィレムによる投票数の多い回答には、次のテキストがあります。

MembershipProviderを使用し、web.configのsystem.webで、試行回数とタイムアウトを構成できます。要件に合わせてmaxInvalidPasswordAttempts="3"とpasswordAttemptWindow="5"を設定します。

これが役に立ったら、Willemsの回答に投票することをお勧めします。

于 2012-08-21T13:14:12.360 に答える
0

MembershipProvider を使用することも、データベース構造に応じて独自のものを作成することもできます。これを実現する方法はたくさんありますが、1 つの方法は、login_attempt、lockflag、およびタイムスタンプ列を含めることです。login_attempt カウンターがあり、これをインクリメントしていると思います (成功したらゼロにリセットします) 次に、ログイン時に値を確認し、ユーザーがロックされている場合は、タイムスタンプを確認して、アカウントに十分な時間が経過したかどうかを確認しますロックを解除します。

于 2012-08-21T13:16:27.120 に答える
0

さて、あなたができることは次のとおりです。

1) ユーザー テーブルに、ログイン試行の最大回数を超えてブロックされた時間を示すフィールド (DateTime) を追加します。2) web.config (AppSettings など) にキーを追加して、アクセスがブロックされたユーザーが再試行できるようになるまで待機する必要がある時間を示します。3) ユーザーを認証しようとするとき、ロック フィールド (DateTime) が null であるかどうかを確認し、ユーザーがログインを正常に実行する場合。それ以外の場合は、現在の時刻をテーブルのこのフィールドの時刻と比較し、appsettings の値より大きい場合、ユーザーはログインできなくなります。

私が助けてくれることを願っています!

于 2012-08-21T13:18:11.577 に答える