这是我的密码文本框 aspx 元素:
<label for="password">Password</label>
<asp:Text Box ID="User Password" runat ="server" Text Mode ="Password" ></asp:Text Box>
这是我的代码
protected void LoginSubmit_Click(object sender, EventArgs e)
{
BOL ObjectBOL = new BOL();
BAL ObjectBAL = new BAL();
ObjectBOL.UserName_value = UserText.Text;
ObjectBOL.UserPassword_value = UserPassword.Text;
try
{
String Login = ObjectBAL.LoginBAL(ObjectBOL);
int i = int.Parse(Login);
if (i > 0)
{
Response.Redirect("dashboard.aspx", false);
}
else
{
//UserText.Text = "";
//UserPassword.Text = "";
lblMsg.Text = (" Login Failed.... Try Again...");
}
}
catch (Exception LoginException)
{
throw LoginException;
}
finally
{
ObjectBAL = null;
}
}
当用户以大写或小写字母输入密码时,它接受该值并重定向到下一页。
SqlCommand cmd = new SqlCommand ("select count (*) from UserTable where User_Name='" + Login.UserName_value +
"'and User_Password='" + Login.UserPassword_value + "'", con);
string str = cmd.ExecuteScalar().ToString();
return str;
最佳答案
这个问题有两种解决方案
更改数据库表性质。默认情况下,SQL Server 会进行不区分大小写的比较,您需要更改数据库表。
更改表用户表 更改列 用户_密码 VARCHAR(20) 整理Latin1_General_CS_AS
或者您可以将COLLATE Latin1_General_CS_AS附加到最后的每个查询,而无需更改您的表。
Latin1_General_CS_AS is for case sensitive and Latin1_General_CI_AS for case insensitive comparison
how to make case sensitive comparison in SQL Server
- 或者您可以将密码转换为二进制,然后存储在数据库中并比较数据库中的二进制内容和用户输入的密码。
建议
您可以使用第一个解决方案,这样会花费更少的时间。但第二种解决方案比第一种更安全。请在谷歌上阅读有关此内容的内容。您会发现直接以纯文本形式存储密码的缺点。
正如评论中提到的,您的代码容易受到 SQL 注入(inject)攻击。请改用参数化查询。
关于c# - 验证密码大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27009149/