这是我的密码文本框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;
答案 0 :(得分:2)
此问题有两种解决方法
更改数据库表的性质。默认SQL服务器执行更改db表所需的不区分大小写的比较。
ALTER TABLE UserTable ALTER COLUMN User_Password VARCHAR(20) 收集Latin1_General_CS_AS
或者您可以在不更改表格的情况下,最后将 COLLATE Latin1_General_CS_AS 附加到每个查询。
Latin1_General_CS_AS用于区分大小写,Latin1_General_CI_AS用于不区分大小写的比较
how to make case sensitive comparison in SQL Server
<强> 建议 强>
您可以使用第一个解决方案,这将花费更少的时间。但第二种解决方案比第一种更安全。请在谷歌上阅读此内容。你会发现以明文形式直接存储密码的缺点。
如评论中所述,您的代码容易受到SQL注入攻击。请改用参数化查询。
答案 1 :(得分:1)
使用COLLATE Latin1_General_CS_AS
更新SQL命令查询,如下所述,将字符串与区分大小写进行比较:
SqlCommand cmd = new SqlCommand ("select count (*) from UserTable where User_Name='" + Login.UserName_value +
"' and User_Password='" + Login.UserPassword_value + "' COLLATE Latin1_General_CS_AS", con);
string str = cmd.ExecuteScalar().ToString();
return str;
答案 2 :(得分:1)
所以我在这里看到一些你应该真正关注的问题,让我解决这些问题,然后我会帮你解答你提出的问题。
首先,正如@Erik Philips的评论中所提到的,您应该使用参数化查询而不是字符串连接。
其次,您确实应该使用强哈希算法对密码进行哈希处理,因此,如果/当您的数据库遭到入侵时,您不会将所有用户密码泄露给攻击者。
好的,至于手头的实际问题,你有两个选择。我见过的更常见的解决方案是根据用户名进行选择,然后比较C#代码中的散列密码,以确定用户是否应该登录。
另一种选择是在SQL中使用区分大小写的查询,在SQL Server中要求您通过COLLATE
命令(查询或列)分配排序规则,或许将其分配给您想要的任何相关字符集:http://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx
答案 3 :(得分:1)
您只需要更改library(tidyverse)
map(lst1 ~ .x %>%
mutate_if(is.numeric, outlier))
查询。无需更改表的性质以及其他任何内容。
sql
答案 4 :(得分:0)
请参考以下链接,我认为如上所述,整理是一种方法。
答案 5 :(得分:0)
SqlCommand cmd = new SqlCommand ("select COUNT(*) from UserTable where (CAST(User_Name as varbinary(50))=cast('"+ Login.UserName_value+"' as varbinary)) and (CAST(User_Password as varbinary(50))=cast('"+Login.UserPassword_value+"' as varbinary)),con);
con.Open();
string str = cmd.ExecuteScalar().ToString();
con.Close();
return str;
试试这个会起作用