我正在开发一个WCF服务,并且要保护此服务免受未经授权的用户的攻击。所以我打算将参数“RSAKey”添加到服务中,客户端(AddIn)将生成并发送每个请求的RSAKey,服务将检查该IP的那个时间传递的RSAKey,并且仅在它有效时才服务。
但我的问题是,如果有人反编译客户端(AddIn),虽然如果他能猜出生成“RSAKey”的实际功能,但是他可以调用该方法并生成RSAKey并使用服务而没有问题。
那么,无论如何都要保护我的服务被有效/允许的客户使用? 注意: 需要考虑的一件大事是,我想在没有凭证的情况下自由地分发/给予客户公共使用。但同时希望防止大量复制/错过使用服务。
答案 0 :(得分:1)
简短回答:不。
这里的问题是您的客户需要能够连接。任何拥有客户副本和时间/知识的人都可以弄清楚它是如何工作的,并让自己的客户端传回相同的东西。然后他们可以自由地做任何他们想做的事。
大公司试图完成这种类型的DRM需要投入大量资金,而且它总是被打破。晦涩难懂是这类事物发挥作用的唯一真正方式(没有人愿意打破它)。
服务本身必须尝试保护自己免受滥用,无论是通过身份验证还是通过尝试理智检查正在进行的调用来阻止您正在尝试阻止的任何内容。你要做的事情并不是非常安全。
(无论如何,这项服务是什么让你如此关注呢?)
答案 1 :(得分:1)
听起来你主要担心的是“过度使用”。如果是这种情况,那么如何在客户端调用上实现某种类型的限制。你可以:
- 限制客户在指定时间段内发出的请求数量 - 限制单个请求中返回的结果数
当然,这两种方案都不能长期保护你。给定时间,任何客户端仍然可以通过您的服务下载整个数据库。通过使用一些限制,您至少需要花一些时间来分析日志并确定您的某个客户端是否真的是恶意的。通过将请求记录到服务中,应该很容易确定特定客户端是否在做恶事。
答案 2 :(得分:0)
也许您可以通过IIS服务器托管您的WCF服务,然后您可以启用https访问,您也可以获取客户端IP地址。因此,如果存在可疑攻击,您可以暂停访问IP一段时间。
答案 3 :(得分:0)
将RSAKey一代留在客户端应用程序之外。将其移动到一个程序集,该程序集将由下载客户端应用程序的站点和WCF服务使用。
当用户即将下载客户端应用程序时提供RSAKey。将{IP地址,生成的RSAKey}对保存在从中下载客户端应用程序的站点和WCF服务的公共存储区中。
提供为客户端设置RSAKey的功能(因此RSAKey将附加到每个WCF消息)。
检查WCF服务收到的每条消息,以确定它是否包含RSAKey以及密钥是否有效(在公共存储中搜索现有的{IP地址,生成的RSAKey}对)。
< / LI> 醇>