保护Web服务

时间:2009-12-17 20:19:37

标签: c# web-services protection

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

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

保护此类内容免遭滥用的标准方法是什么?我发现的大多数教程似乎都没有提及保护它们的安全性。谢谢!

6 个答案:

答案 0 :(得分:3)

Daniel Vassallo是对的。您将需要使用X509证书来验证调用该服务的人是否合法。然而,这确实提高了解决方案的复杂性。您将需要使用Microsoft WSE以及可能购买的第三方组件。

没有它,你可以使用传入的用户名和密码。但是,需要有一些共享算法来根据日期,时间等来散列信息..没有哈希,你打开自己黑客攻击远不止于此。即使使用SSL,因为字典攻击最终可能会中断。

答案 1 :(得分:2)

  1. 使用用户名和密码应该不错。
  2. 如果您知道将调用webservice的计算机的客户端IP地址,请将URL限制为仅限于已知IP。

答案 2 :(得分:1)

您可能需要查看 WS-Security 协议。

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

然后,

Server计算相同的ID + Number散列并验证这两个值。

答案 5 :(得分:0)

这是一个有效的密码...除了在一个字段中没有用户名和密码。

没有技术原因本身为什么你不应该将用户名和密码组合到一个字段中,但按照惯例,如果没有其他密钥则它们是两个字段。

这有三个商业原因:

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

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

  • 安全性最佳做法指南和具体流程假设您使用用户名和密码而不是组合字段。这可能会使制定共识性政策变得更加困难。

密码(如果使用组合的用户名/密码字符串,则为密码部分)将遵守有关变更政策,不公开,复杂性和长度的所有安全建议。我建议您使用SSL和WS-Security,尽可能在安全区域中使用SSL。您可能需要在线上加密。

修改

我打算写TLS而不是SSL。

修改

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