我是asp.net中的新编码。我已经完成了一个(Web表单)登录页面,并在asp.net + c#中进行了验证。问题是当我以小写/大写字母输入对应于电子邮件的密码时,它授予我不应该发生的条目。我已经在这里发布了许多用于登录页面的代码,但同样的事情正在发生。 例如,如果db中的密码是“ss”并且我们输入“ss”,“Ss”,“sS”或“SS”;我可以登录。我怎么能阻止这种情况发生?
我在这里发布我的代码。请帮忙。
protected void btn_login1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=SHA\SQLE2012;Initial Catalog=OnlineShoppingStore;User ID=sa;Password=56238");
con.Open();
SqlCommand cmd = new SqlCommand("usp_ViewUserByUserId", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Email", txt_email.Text);
cmd.Parameters.AddWithValue("@Password", txt_password.Text);
string output = cmd.ExecuteScalar().ToString();
cmd.ExecuteNonQuery();
if (output =="1")
{
Response.Write("<script>alert('Login Successful!!')</script>");
Session["Email"] = txt_email.Text;
Response.Redirect("Home.aspx");
}
else
Response.Write("<script>alert('Login Failed! Incorrect username/password')</script>");
con.Close();
}
这是我的存储过程
ALTER PROCEDURE [dbo].[usp_ViewUserByUserId]
@Email as varchar(50),
@Password as varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select count(*) from tbl_Customer where Email = @Email and Password = @Password
end
答案 0 :(得分:0)
谢谢大家花时间提出建议。 下面的代码完成了这个技巧
select count(*)
from tbl_Customer
where Email = @Email and BINARY_CHECKSUM(Password) = BINARY_CHECKSUM(@Password)