如何确保Web服务的安全性?

时间:2011-11-18 06:37:23

标签: c# asp.net web-services webmethod

我有一个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+"'");

此致 大卫

1 个答案:

答案 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("*","*")