C# 验证客户端的真实性

C# 验证客户端的真实性,c#,security,hash,client-server,verification,C#,Security,Hash,Client Server,Verification,我对服务器-客户机模型中的安全性有以下担忧 想象一下: 我有一个C#WinForms客户端,希望与服务器通信(控制台应用程序C#(Net Framework)中的PHP GET-POST请求、套接字或WebSocket在Mono下的Debian上运行,而不是使用ASP.Net) 出现的第一个问题是服务器(用PHP或C#编写)是否必须对客户端生成的匿名请求进行某种控制,为此,我们必须对每个请求使用服务器生成的某种类型的令牌 问题与令牌无关(我的计划是在WebSocket(C#)中使用HTTPS(P

我对服务器-客户机模型中的安全性有以下担忧

想象一下:

我有一个C#WinForms客户端,希望与服务器通信(控制台应用程序C#(Net Framework)中的PHP GET-POST请求、套接字或WebSocket在Mono下的Debian上运行,而不是使用ASP.Net)

出现的第一个问题是服务器(用PHP或C#编写)是否必须对客户端生成的匿名请求进行某种控制,为此,我们必须对每个请求使用服务器生成的某种类型的令牌

问题与令牌无关(我的计划是在WebSocket(C#)中使用HTTPS(PHP)或SSL/TLS+证书进行网络级别的客户机-服务器通信,以避免欺骗或MitM)

当服务器必须给“客户机”(我们需要检查其有效性,这是主要关注点)一个令牌以允许客户机执行请求时,就会出现问题。对任何客户机来说,从服务器提供令牌都是非常容易的(如何复制(反向初始化)一个向服务器发出请求以尝试获取有效令牌的客户机,至少在我计划实现它时是这样,因此需要帮助)

在我的想法中,是为客户端的程序集文件生成md5或sha哈希。因此,如果有人试图复制这些步骤,那将是困难的。因为他/她将需要修改程序集的源代码或创建恶意程序集,并通过冲突获得相同的哈希值(这很困难)

我不知道这个系统有多高效,所以我需要你在这方面给我一些指导

我一直在研究OAuth,我认为这种类型的实现不是我想要的,因为这种实现是针对用户级别的(以避免其他用户违反主用户数据),而不是针对客户端(应用程序)


因此,如果有人能在这个问题上提供指导,这将是非常有帮助的。

您无法对客户端进行身份验证,这是不可能的。客户机中的任何内容都是用户(攻击者)知道的,任何秘密,以及您在那里拥有的任何内容。唯一的问题是困难,但无论你做什么,都不会很困难

同样,在您的哈希方案中,您将如何处理哈希,将其发送到服务器?当一个不同的客户端可以发送它想要的任何东西(例如,从网络嗅探到的正确的散列)时,为什么它必须匹配散列呢

同样,由于软件需要在客户机上运行,因此在那里运行或在网络上发送的任何内容都会向用户公开,用户可以在不同的客户机上复制它。不可能安全地防止这种情况。此外,如果您控制一个端点(即客户端),ssl/tls在这里也没有帮助


想象一下,如果有可能的话,软件盗版将不会是一件事——但事实上确实如此。

您无法对客户端进行身份验证,这是不可能的。客户机中的任何内容都是用户(攻击者)知道的,任何秘密,以及您在那里拥有的任何内容。唯一的问题是困难,但无论你做什么,都不会很困难

同样,在您的哈希方案中,您将如何处理哈希,将其发送到服务器?当一个不同的客户端可以发送它想要的任何东西(例如,从网络嗅探到的正确的散列)时,为什么它必须匹配散列呢

同样,由于软件需要在客户机上运行,因此在那里运行或在网络上发送的任何内容都会向用户公开,用户可以在不同的客户机上复制它。不可能安全地防止这种情况。此外,如果您控制一个端点(即客户端),ssl/tls在这里也没有帮助

想象一下,如果有可能的话,软件盗版将不会是一件事——但事实确实如此