5

我有一个我们创建的 WebService 项目,用于向我们的客户公开一些方法(特别是如果他们调用其中一种方法,它将在我们的服务器上触发一个事件),他们可以在他们自己的 C# 项目中调用(一些客户会正在做网络表单应用程序,有些人会在他们的内部网站上做)。

由于该方法的性质,其中一个参数是一个字符串,用于标识客户是谁(因此我们可以触发适当的事件),我不太相信这足以防止人们发送随机数据,直到他们绊倒根据有效标识符之一。

保护此类东西免受滥用的标准方法是什么?我发现的大多数教程似乎都没有提到任何关于确保它们安全的内容。谢谢!

4

6 回答 6

3

丹尼尔·瓦萨洛是正确的。您将需要使用 X509 证书来验证调用该服务的人是否合法。然而,这确实大大提高了解决方案的复杂性。您将需要使用 Microsoft WSE 并且可能需要购买的第 3 方组件。

没有它,您可以使用传入的用户名和密码。但是,需要一些共享算法来根据日期、时间等对信息进行散列。如果没有散列,您将更容易受到黑客攻击不是。即使使用 SSL,字典攻击也可能最终侵入。

于 2009-12-17T20:48:59.513 回答
2
  1. 使用用户名和密码应该很好。
  2. 如果您知道将调用 web 服务的机器的客户端 IP 地址,请将 URL 限制为仅用于已知 IP。
于 2009-12-17T20:34:00.933 回答
1

您可能想查看WS-Security协议。

该协议包含有关如何在 Web 服务消息传递上实施完整性和机密性的规范。

于 2009-12-17T20:30:39.043 回答
0

身份验证通常使用 SOAP 标头处理,请参阅MSDN 页面。

这篇codeguru 文章给出了一个例子,虽然它已经很老了。

于 2009-12-17T20:35:22.177 回答
0

作为协议的一部分,您可以向客户端发送一个随机数。然后,客户端使用该随机数对标识符进行加盐,并对组合值进行哈希处理。您可以将该组合值返回给服务器。

然后服务器计算相同的 ID+Number 哈希并验证这两个值。

于 2009-12-17T20:36:56.793 回答
0

这实际上是一个密码......除了在一个字段中等待它的用户名和密码。

本身没有技术原因为什么您不应该将用户名和密码组合到一个字段中,但按照惯例,由于没有额外的密钥,它们是两个字段。

这是出于三个商业原因:

  • 可以在应该知道用户身份(用户名?!)但不拥有密码的人之间明确讨论帐户身份

  • 在法律上证明未经授权的访问是最容易的,如果有必要的话,如果访问协议是传统的,因为判例法更有可能适用并且情况更有可能明确(并导致较小的法律费用! )。在商业系统的公共网络上没有用户名并非闻所未闻,并且在某些系统中是一个好主意(但通常它只是简单地不是......一个好主意)。

  • 一般安全最佳实践和特定流程指南假定您使用用户名和密码,而不是尽可能使用组合字段。这可能会使制定共识政策变得更加困难。

密码(或密码部分,如果您使用组合的用户名/密码字符串)将遵守有关更改策略、保密、复杂性和长度的所有常见安全建议。我建议您也使用 SSL 和 WS-Security,以便在安全领域尽可能传统。您可能需要在线加密。

编辑

我的意思是写 TLS 而不是 SSL。

编辑

抱歉,不,我的意思是 TLS 或 WS-Security。

于 2009-12-17T20:42:40.047 回答