我创建了一个Web服务,我想通过使用表单身份验证来提高安全性。我添加了以下代码:
[WebMethod(Description = "Login function returns true for success and false for fail.", EnableSession = true)]
public bool Login(string Username, string Password)
{
return User.Validate(Username, Password);
}
我的User.Validate函数执行所有身份验证并且工作正常,但我不确定将用户名和密码传递给Web服务是否安全。这是否比通过没有SSL的普通网络表单提交用户名和密码字段更安全?
答案 0 :(得分:3)
这是否比通过没有SSL的普通网络表单提交用户名和密码字段更安全?
这是诅咒和微弱的赞美。提交没有SSL的密码确实不安全。
无论如何,似乎start with the basics可能是个好主意。那篇文章是否回答了我认为你的实际问题(“我该如何正确地做到这一点?”)?
答案 1 :(得分:1)
您的网络方法不比没有SSL的普通网络表单安全。两者都是基本的POST条目(你可以让它们GET,但最有可能是POST)以明文形式发送它们的有效载荷内容(用户名,密码)。
只是评论:不确定通过添加返回简单布尔值的身份验证方法使您的Web服务更安全的策略。大多数身份验证方案都需要使用必须由客户端携带的会话或身份验证令牌。在Web浏览器中,这是通过cookie等自动执行的;它需要主动管理大多数使用Web服务的客户。
答案 2 :(得分:0)
取决于您需要信任的人。客户端,传输和/或服务器。
服务器 - 你相信运行服务器的人吗?用户是否会在服务器上使用与他们公司相同的密码(为服务器所有者提供密码以尝试攻击您的公司帐户)?
如果您要提供更改密码页,那么对服务器安全性进行良好的健全性检查。任何允许用户更改密码的网站都将通过线路发送密码,并且它将在服务器上以明文形式提供(可以在途中加密)。这可以避免,但我还没有找到一个可以做到这一点的网站。
干杯,
答案 3 :(得分:0)
如果不使用SSL,传递密码是不安全的。此外,如果服务暴露多种方法,则用户必须为每个方法调用输入用户名和密码,否则调用应用程序必须在某个地方保留此信息,并可能导致其他漏洞。
要避免所有这些问题,保护服务的正确方法之一是使用与OAuth protocol类似的内容。此协议交换请求令牌的用户名密码,然后将此请求令牌交换为访问令牌。对Web服务的后续调用将使用访问令牌而不是用户名密码。