1

不久前,我们为没有站点证书/SSL 的客户创建了一个站点。它只有一个基本的 asp_net 登录系统。

您不能从该网站购买任何东西,并且它不保存个人详细信息 - 它只是显示股票并为用户提供一个电话号码,他们可以打电话购买股票。

我们的一个用户有自己的系统,并希望通过 WebService 获取一些信息——我们打算只放置一个带有 WebMethod 的 WebService,该 WebMethod 接受用户名、密码和 ID,然后将一些信息传递回他们的系统。

一位开发人员表示,这会使系统的安全性大大降低,因为使用用户名和密码进行 WebMethod 调用的安全性远低于网站上的登录系统。

这个 WebMethod 调用真的比网站上的登录系统安全吗?

4

2 回答 2

0

这一切都取决于您计划如何接受该密码数据。您应该确保强制他们不要通过网络发送密码明文。您可以通过以下类型的模式来做到这一点:

  1. 客户端请求进行身份验证
  2. 服务器用临时公钥回复。生成一个临时私钥并存储在服务器上,该私钥可能会在短时间内过期(如果未使用)。
  3. 客户端使用公钥加密密码
  4. 客户端通过网络发送加密密码和其他数据

一般来说,无论是什么密码,您都不应该通过网络发送纯文本密码。二进制、soap、web 服务、http 等等。如果它发送,有人可以嗅探它。只需要一次良好的wireshark 捕获,您的所有数据都会受到损害。

如果已经在进行有线加密,那么我看不出它的安全性如何。如果您也添加某种握手功能会更好,以便您知道谁是谁,或者如果 IP 源无法发送正确的令牌,您可以确保对请求进行速率限制。这就像如果某人没有在适当的尝试次数内登录,就将他们锁定在您的 UI 之外。

添加 SSL 也是一个好主意,因为它可以防止中间人攻击。

我不是安全专家,但我所知道的是安全是关于层的。加密流量,从不发送明文,关闭端口,管理权限,哈希密码,握手,限制身份验证尝试,大量日志等。

于 2012-09-26T22:39:17.820 回答
0

您可以对 WebService 文件使用混合模式身份验证。

请按照以下步骤操作:

  • 右键单击 web 服务文件
  • 转到身份验证
  • 删除匿名并单击基本 windows 身份验证
  • 将文件名添加到 web.config 以使其可公开访问

<location path="webserice.svc"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>

  • 使用管理工具在网络服务器中创建用户
  • 调用 Web 服务并使用您创建的用户的凭据

localhost.MyWebService myService = new localhost.MyWebService();
System.Net.CredentialCache myCredentials = new System.Net.CredentialCache(); NetworkCredential netCred = new NetworkCredential("UserName", "Password"); myCredentials.Add(new Uri(myService.Url), "Basic", netCred); myService.Credentials = myCredentials;

如果您在调用 Web 服务时可以使用 SSL,那就太好了

于 2012-09-27T02:00:41.713 回答