【发布时间】:2014-10-25 15:17:35
【问题描述】:
我正在使用 asp.net 框架通过电子邮件发送忘记密码。 但我认为我的代码存在一些问题。 请帮忙 。 button_click 事件代码如下。
protected void frgtbtn_Click(object sender, EventArgs e)
{
string st = "select E_mail FROM registraion_master WHERE E_mail='" + Email.Text + "'";
cmd = new SqlCommand(st, sqlcon);
cmd.Connection.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds=new DataSet();
sda.Fill(ds);
cmd.Connection.Close();
if(ds.Tables[0].Rows.Count > 0)
{
MailMessage email = new MailMessage();
email.From = new MailAddress(Email.Text); //Enter sender email address.
email.To.Add(Email.Text); //Destination Recipient e-mail address.
email.Subject = "Your Forget Password:"; //Subject for your request.
email.Body = "Hi,Your Password is: " + ds.Tables[0].Rows[0]["Pwd"] + "";
email.IsBodyHtml = true;
//SMTP SERVER DETAILS
SmtpClient smtpc = new SmtpClient("smtp.gmail.com");
smtpc.Port = 587;
smtpc.UseDefaultCredentials = false;
smtpc.EnableSsl = true;
gmail_ID.Text = "anuragdixit132@gmail.com";//Enter your gmail id here
gmail_pwd.Text="vineet";//Enter your gmail id here
smtpc.Credentials = new NetworkCredential(gmail_ID.Text,gmail_pwd.Text);
smtpc.Send(email);
string script = @"<script language=""javascript""> alert('Password Has Been Sent.......!!!!!.');
</script>;";
Page.ClientScript.RegisterStartupScript(this.GetType(), "myJScript1", script);
}
else
{
pwdlbl.Text = "This email address is not exist in our Database try again";
}
在此代码中:出现异常:列'Pwd'不属于表Table。
【问题讨论】:
-
我怀疑您将密码存储为纯文本。 不要那样做! 请阅读:Implement password recovery best practice 您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
-
列 'Pwd' 不在表中 是否不太明显,正如@SonerGönül 所说,不要像那样存储密码
-
哦,'Pwd' 不在表中的原因很可能是因为您在 select 语句中只获得了
E_mail列,然后不使用它,以及使用在 select 子句中带有文本条目的非参数化查询... -
除了不将密码存储为纯文本之外,您还应该使用parameterized queries而不是使用字符串连接来构建您的sql字符串(
WHERE E_mail='" + Email.Text + "') -
@AnuragDixit 声明列'Pwd'不属于表Table的地方表示在数据集中,这是您的选择语句
SELECT E_mail FROM的结果。您只选择 E_mail,因此结果集中只存在 E_mail。如果它是你自己的项目也没关系,但我仍然会推荐好的做法。
标签: c# asp.net sql-server database email