Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Asp.net中重置密码不起作用_C#_Sql_Asp.net - Fatal编程技术网

C# 在Asp.net中重置密码不起作用

C# 在Asp.net中重置密码不起作用,c#,sql,asp.net,C#,Sql,Asp.net,我试图允许用户在忘记密码与用户名和完整密码匹配时重置/更新密码,以便重置密码。然而;我不断收到错误消息,用户名和名称不匹配,即使它们匹配 string strConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; string str = null; SqlCommand com; byte up; protected void btn_update_Click(obje

我试图允许用户在忘记密码与用户名和完整密码匹配时重置/更新密码,以便重置密码。然而;我不断收到错误消息,用户名和名称不匹配,即使它们匹配

 string strConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string str = null;
SqlCommand com;
byte up;
protected void btn_update_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(strConnString);
    con.Open();
    try
    {
        string un, pw;
        un = txtUsername.Text;

        pw = Encrypt(txt_npassword.Text, "mykey");
        SqlCommand command = new SqlCommand("PP_spReset", con);

        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add("@UserName", SqlDbType.VarChar).Value = un;

        command.Parameters.Add("@password", SqlDbType.VarChar).Value = pw;

        con.Open();


        int rowupdated = command.ExecuteNonQuery();
        if (rowupdated > 0)
        {
            Response.Redirect(@"~/Account/Login.aspx"); ;
        }
        else
        {
            lbl_msg.Text = "Username does not exist";
        }

    }
     catch (Exception ex)
    {
        throw ex;
    }

}

public string Encrypt(string source, string key)
{
    TripleDESCryptoServiceProvider desCryptoProvider = new TripleDESCryptoServiceProvider();
    MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();

    byte[] byteHash;
    byte[] byteBuff;

    byteHash = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));
    desCryptoProvider.Key = byteHash;
    desCryptoProvider.Mode = CipherMode.ECB; //CBC, CFB
    byteBuff = Encoding.UTF8.GetBytes(source);

    string encoded =
        Convert.ToBase64String(desCryptoProvider.CreateEncryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
    return encoded;
}

您的第一个问题是错误处理,无法知道错误是什么,因为您正在掩盖它

您有几个选项,但需要定义错误(我将其定义为e):

选项1-将其写在您的消息中(不应在生产中这样做,因为这会向客户(潜在的黑客)提供有关您的基础设施的太多信息,但这只是一个开始)

选项2-抛出异常,让IIS决定要做什么。在开发模式下,在配置文件中设置customErrors属性:

<customErrors mode="RemoteOnly"></customErrors>
除此之外,您还有一个SQL注入问题,需要使用SQL参数进行纠正。以下是一些关于这个主题的帖子:


  • 您正在从catch块中获取错误消息,因此try块中出现了问题。您可以调试并查看哪一行引发异常吗?您的代码存在多个问题,例如sql注入漏洞。您能否从您的
    catch
    中提供异常详细信息?您正在捕获任何类型的错误、SQL错误、连接错误等,并且您决定用户名和名称不匹配。为什么?@Vinit我已经更新了我的解决方案;但它似乎仍然给出了相同的错误消息,但如果我在代码中使用sql查询,它就会工作
    catch (Exception e)
    {
        throw e;
    }