我有一个Web应用程序(在VS2008 C#ASP.NET 3.5 Framework中)。在我的登录页面中有一个函数CheckLogin(),它执行登录功能。我使用过远程Web服务。 objWeb是该Web服务的对象。 WebService_CheckLogin是我的远程Web服务中的web方法。数据库连接字符串写在我的websrvice的类文件中。
public DataSet CheckLogin()
{
string username = Convert.ToString(txtUname.Text);
string password = Convert.ToString(txtPassword.Text);
return objWEB.WebService_CheckLogin(username,password);
}
我的网络服务中的Webmethod
[WebMethod]
public DataSet WebService_CheckLogin(string uname,string pswd)
{
c.connect();
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand("sp_verifyuser", c.con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Username", uname);
cmd.Parameters.AddWithValue("@Password", pswd);
c.getdataset(cmd, ref ds);
return ds;
}
我在webservice中的连接类
public void connect()
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
con.ConnectionString="Data Source=xxxxxxx;Initial Catalog=xx;User ID=xx;Password=xxxx";
con.Open();
}
我的问题是'根据安全措施有什么不对吗?'我的意思是“任何人都可以使用其网址加入我的网络服务”吗?我有许多其他web方法,我在其中传递字符串作为参数,如
string profilePassword = objWEB.Verify_ProilePassword("exec sp_verify_profilepwd '" + txt_profil_pwd.Text + "','"+cid+"'");
此致 大卫
答案 0 :(得分:2)
这完全取决于您如何保护WebMethods。您上面的代码可能会检查用户是否拥有有效的用户名/密码组合,但很难从中确定您正在使用的内容。
在您使用authenticated a user和EnableSession获取WebMethod之后,您可以执行以下操作:
[WebMethod(EnableSession = true)]
public static string HelloWorld(){
if (User.Identity.IsAuthenticated)
{
return "Hello " + HttpContext.Current.Request.User.Identity.Name;
}
else
{
return "I don't talk to strangers";
}
}
随意发布任何问题。
此外 - 如果您对sp_verifyuser存储过程不小心,这样的调用可能会导致灾难:
WebService_CheckLogin("*","*")