[英]Querying a database for username and password
我是C#的新手。 我正在使用区分大小写的SQL Server 2008数据库验证用户名和密码。 我该怎么办?
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=db_WiBo;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT * from tb_Account where Username= '"+textBox1.Text+"' AND Password= '"+textBox2.Text+"' ", conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader()
if (reader.HasRows)
{
reader.Close();
this.Hide();
}
提前致谢
1)您应该使用存储过程或参数化查询,而不要使用SQL串联。 您的代码中已经存在一个巨大的SQL Server注入安全漏洞。
你有什么问题? 代码看起来不错-如果没有要检索的记录,您确定输入与数据库中的数据匹配吗?
代码仅执行查询,如果找到,则关闭阅读器并隐藏表单。
您也不应将原始密码存储在数据库中-另一个安全漏洞。 而是对它们进行散列/加密,然后对照输入中的散列/加密值检查该值。 为了区分大小写,您可以使用归类
http://technet.microsoft.com/zh-CN/library/ms184391.aspx
http://blog.sqlauthority.com/2007/04/30/case-sensitive-sql-query-search/
一些东西:
SqlDataReader reader = cmd.ExecuteReader()
的末尾。 .Close()
连接。 这是上述示例:
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=db_WiBo;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand(@"SELECT * from tb_Account where Username= '@username' AND Password= '@password' ", conn))
{
cmd.Parameters.Add("@username", textBox1.Text);
cmd.Parameters.Add("@password", textBox2.Text);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Close();
this.Hide();
}
conn.Close();
}
}
除了SQL注入问题外,您还需要使用排序规则或强制转换为二进制。 我发现了另一个SO问题,它有很多有用的东西:
如何在WHERE子句中进行区分大小写的搜索(我正在使用SQL Server)?
首先:请勿为此使用字符串concat。 这可以轻松地用于代码注入。
您可以改用存储过程,也可以改用LinQ to SQL,甚至可以使用内置的MembershipProvider
尽管已经指出了有关安全性的设计问题,但是,如果SQL Server实例的默认排序规则不区分大小写,则需要选择合适的排序规则。 SQL Server安装的默认排序规则是[通常,取决于服务器区域设置] SQL_Latin1_General_Cp1_CI_AS
,表示Latin-1代码页,不区分大小写,区分重音。
创建数据库时,可以为该数据库指定默认排序规则。 并且在创建表时,可以指定用于每个char
, varchar
, nchar
或nvarchar
列的排序规则。
您也可以通过适当的DDL语句更改它们。 请注意,更改collatino可能会影响数据完整性,从而导致主键和唯一索引之类的东西被破坏。
创建一个表并为其指定列排序规则很容易:
create table account
(
id int not null identity(1,1) primary key clustered ,
user_id varchar(32) collate SQL_Latin1_General_Cp1_CS_AS not null unique ,
password varchar(32) collate SQL_Latin1_General_Cp1_CS_AS not null unique ,
...
)
您也可以使用alter table
和alter database
更改排序规则。
可以在http://technet.microsoft.com/zh-cn/library/ms180175.aspx和http://technet.microsoft.com/zh-cn/library/ms188046.aspx中找到支持的归类
你应该
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.