我创建了一个"登录" Windows窗体应用程序与WCF, 如何将输入用户名和密码发送到WCF并检查SQL中是否有用户名?
private void loginbt_Click(object sender, EventArgs e)
{
string username = textBox1.Text;
string password = textBox2.Text;
//check username and password are not empty
if (username.Trim().Length != 0 && password.Trim().Length != 0)
{
checkPassword.CustomerServiceClient service= new checkPassword.CustomerServiceClient();
var enterPassword = service.checkPassword(username, password);
//check input value here with WCF?
}
}
我添加Index was outside the bounds of the array.
时收到string getUsername = enterPassword[0].name;
异常。看起来WCF没有从文本框中获取输入值,换句话说就是checkPassword(null,null)。
public Customer[] checkPassword(string name, string password){
List<Customer> customers = new List<Customer>();
SqlConnection connection = new SqlConnection(
"Data Source = 11111; Initial Catalog = 1111;" +
"User ID = 1111; Password = 11111");
connection.Open();
SqlCommand command = new SqlCommand("select customerId, customerName, address, password, phone from Customer where customerName='"+name+"'", connection);
SqlDataReader reader = command.ExecuteReader();
if (reader.Read()){
Customer newCustomer = new Customer(reader.GetString(1), reader.GetString(3));
string correctPW = reader.GetString(3);
if (correctPW == password)
{
customers.Add(newCustomer);
}
}
reader.Close();
connection.Close();
return customers.ToArray();
}
抱歉,我真的对这个问题感到困惑,希望你能理解我的问题,谢谢你的帮助。
答案 0 :(得分:0)
服务调用无法以checkPassword(null, null)
执行,因为您在Trim
上调用username
并在执行序列中进一步调用password
。如果两个变量都为空,您将在服务调用之前收到NullReferenceException
。
我看到的一个红旗是你在决定进行服务调用时测试username
和password
的修剪(空白截断)版本,但是你继续使用未掺杂的将它们作为参数传递给服务调用时的版本。是不是因为参数中有空格,服务的行为不符合你的想法?
您真正需要做的是在调用服务之前验证username
和password
的值。问问自己,“我的服务是否使用指定的参数值正确响应?”问题可能在于服务而不是呼叫者。你将不得不在这里做一些老式的调试。这是我们不能为你做的事情,所以脱掉那些袜子和鞋子,让你的脚湿透!
作为旁注,您似乎正在通过网络以纯文本形式传递密码。中间人拦截这些信息并不是非常困难(实际上可能很容易)。同样,我可以看到你也对SQL注入攻击持开放态度。知道您正在使用无参数内联SQL我可以告诉您我的用户名是x' or 'a'='a
,这将导致返回Customer
表中的所有行。我不知道这是否一定会导致您的案件发生安全漏洞,但我希望您至少可以想象这可能导致的各种破坏。我只提到了所有这些因为你的WCF似乎与安全相关。
答案 1 :(得分:0)
解决了我的问题。
这是因为我使用输入用户名从sql中选择数据,所以当我输入一个不存在的用户名时,会出错。
谢谢大家。