代码之家  ›  专栏  ›  技术社区  ›  BarrettJ

保护Web服务

  •  5
  • BarrettJ  · 技术社区  · 16 年前

    我有一个WebService项目,我们创建它是为了向我们的客户机公开一些方法(特别是如果他们调用其中一个方法,它将在我们的服务器上触发一个事件),他们可以调用自己的C项目(一些客户机将使用Web表单应用程序,而一些客户机将在他们的内部站点上使用它)。

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

    保护这种东西不受虐待的标准方法是什么?我发现的大多数教程似乎都没有提到任何关于保护它们安全的内容。谢谢!

    6 回复  |  直到 16 年前
        1
  •  3
  •   Clarence Klopfstein    16 年前

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

    如果不这样做,您可以使用传入的用户名和密码。但是,需要一些共享算法来根据日期、时间等散列信息。没有散列,你就更容易被黑客攻击。即使有了ssl,字典攻击也可能最终爆发。

        2
  •  2
  •   Harun Prasad    16 年前
    1. 使用用户名和密码应该很好。
    2. 如果您知道将调用WebService的计算机的客户端IP地址,请将该URL限制为仅限于已知的IP。
        3
  •  1
  •   Daniel Vassallo    16 年前

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

    此协议包含如何在Web服务消息传递上强制实现完整性和机密性的规范。

        4
  •  0
  •   Marc    16 年前

    身份验证通常使用SOAP头处理,请参见 this MSDN页。

    This 代码专家文章给出了一个例子,尽管它已经很老了。

        5
  •  0
  •   kevin    16 年前

    作为协议的一部分,您可以向客户机发送一个随机数。 然后,客户机用该随机数固定标识符,并散列组合值。 您可以将该组合值返回到服务器。

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

        6
  •  0
  •   martinr    16 年前

    这显然是一个密码…除了wait no,它是一个用户名和密码。

    没有 技术的 您不应该将用户名和密码组合到一个字段中的原因本身就是,但是按照惯例,如果没有附加的密钥,它们是两个字段。

    这有三个商业原因:

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

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

    • 关于安全性方面的最佳实践的指导原则一般和特定过程假设您使用用户名和密码,而不是尽可能使用组合字段。这可能使制定共识政策变得更加困难。

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

    编辑

    我想写的是tls而不是ssl。

    编辑

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

    推荐文章