我对服务器 - 客户端模型的安全性有以下关注......
想象一下:
我有一个想要与服务器通信的C#WinForms客户端(在Mono下在Debian上运行的Console App C#(Net Framework)中的PHP GET-POST请求,Socket或WebSocket,而不是使用ASP.NET)。
出现的第一个问题是服务器(用PHP或C#编写)是否必须对客户端生成的匿名请求进行某种控制,为此,我们必须使用某种类型的令牌生成服务器到每个请求。
问题与令牌无关(我的计划是在WebSockets(C#)中使用HTTPS(PHP)或SSL / TLS +证书进行网络级别的客户端 - 服务器通信,以避免欺骗或MitM )。
当服务器必须向"客户端提供问题时会出现问题。 (我们需要检查其有效性,主要关注点)一个令牌,以允许客户端做请求。任何客户端都很容易从服务器提供令牌(如何复制(反向整合)一个客户端,它向服务器发出请求以尝试获取有效令牌,至少在我计划实现它时,因此需要帮助)。
在我的想法中,是为客户端的程序集文件生成md5或sha哈希。因此,如果有人试图复制这些步骤,那将很困难。因为他/她需要修改程序集的源代码或进行恶意程序集并通过碰撞获取相同的哈希值(这很难)。
我不知道这个系统有多高效,所以我需要你在这方面指导我。
我一直在关注OAuth,我认为这种类型的实现并不是我想要的,因为这种实现是针对用户级别的(以避免其他用户违反主用户数据),而不是客户端(应用程序)。
因此,如果有人可以就此问题提供指导,那将会有很大的帮助。
答案 0 :(得分:1)
您无法对客户端进行身份验证,但这是不可能的。用户(攻击者)知道客户端中的任何内容,任何秘密,您拥有的任何内容。唯一的问题是难度,但是你做的任何事情都不会很困难。
同样在您的哈希方案中,您将如何处理哈希,将其发送到服务器?为什么不同的客户端必须匹配哈希,当它可以发送它想要的任何东西时(即正确的哈希,从网络中嗅出)?
因此,由于软件需要在客户端计算机上运行,因此向用户公开在网络上运行或在网络上发送的任何内容,并且他可以在不同的客户端中复制它。无法安全地防止这种情况发生。如果您控制其中一个端点(即客户端),ssl / tls在这里也没有帮助。
想象一下,如果有可能,某种程度上软件盗版不会是一件事 - 但它确实存在。