2011-02-09 120 views
2

我正在开发一个WCF服务,并保护此服务免受未经授权的用户的侵害。所以我打算向服务添加参数“RSAKey”,并且客户端(AddIn)将生成并发送每个请求的RSAKey,并且服务将检查该IP的当时通过的RSAKey,并且仅在其有效时才提供服务。需要帮助保护WCF服务

但我在这里的问题是,如果有人反编译客户端(AddIn),但如果他能猜测产生“RSAKey”的实际函数时它会被复制,他可以调用该方法并生成RSAKey并使用服务而没有问题。

那么,无论如何保护我的服务被有效/允许的客户消费? 注: 要考虑的一件大事是,我想分发/赠予客户自由公开使用没有凭据。但同时要防止大量复制/误用服务。

+0

让我看看我是否有这样的直截了当:你想在已知的恶劣环境(反编译等)中保护你的客户端二进制文件,但是你希望允许客户端公开使用你的服务*证书*。是对的吗? – 2011-02-09 05:28:39

+0

@Lars,是的,你是对的。但只能通过我提供的客户 – Veeru 2011-02-09 06:38:15

+0

感谢大家花些宝贵的时间来回答/解决我的问题。任何概念化的想法也是受欢迎的,即使它很难实现。 – Veeru 2011-02-09 14:02:03

回答

0

也许你可以承载由IIS服务器WCF服务,那么您可以启用HTTPS访问,你可以得到客户端IP地址了。因此,如果存在可疑攻击,您可以暂停访问ip一段时间。

0
  1. 让RSAKey代退出客户端应用程序。将其移动到一个程序集,该程序集将同时用于下载客户端应用程序的站点和WCF服务。

  2. 当用户要下载客户端应用程序提供RSAKey。将{IP地址,生成的RSAKey}对存储在与正在下载客户端应用程序的站点以及WCF服务共同的存储区中。

  3. 提供设置RSAKey为客户端(因此RSAKey将被附连到每个WCF消息)的能力。

  4. 检查WCF服务收到的每条消息,以确定它是否包含RSAKey以及密钥是否有效(搜索公共存储区中现有的{IP地址,生成的RSAKey}对)。

1

简短的回答:

这里的问题是,你的客户需要能够连接。任何有你的客户副本和时间/知识的人都可以弄清楚它是如何工作的,并让他们自己的客户端返回相同的东西。然后他们可以自由地做任何他们想做的事情。

大量资金被投入到试图通过大企业来完成这种类型的DRM的,它总是坏。朦胧是这种类型的东西唯一真正的工作方式(没人会打破它)。

本身有尝试和保护自己不被滥用,无论是通过认证或通过努力健全服务检查所取得的通话阻止不管它是你正在试图阻止。你试图做的并不是很安全。

(这是什么服务做,你这么关心它,反正?)

1

这听起来像是你主要关注的是真的“过度使用”。如果是这样的话,那么如何实现客户端调用的某种类型的限制。你可以:

-LIMIT客户端发出在规定时间的请求数期
-LIMIT在单个请求返回的结果数量

当然,没有这些选项将保护您在长期。如果时间过去,任何客户仍然可以通过您的服务下载整个数据库。通过使用一些限制,您至少需要花费一些时间来分析日志并确定您的某个客户是否实际上是恶意的。通过将请求记录到服务中,确定特定客户端是否正在做某些事情是非常容易的。