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;
}