【问题标题】:Verify authenticity of an client验证客户端的真实性
【发布时间】:2018-04-19 19:49:27
【问题描述】:

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

想象一下:

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

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

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

当服务器必须向“客户端”(我们需要检查其有效性,这是主要关注点)提供一个令牌以允许客户端执行请求时,就会出现问题。任何客户端都可以很容易地从服务器提供令牌(如何?复制(反向工程化)客户端,该客户端向服务器发出请求以尝试获取有效令牌,至少,正如我计划实现的那样,因此需要帮助)。

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

我不知道这个系统效率如何,所以在这方面我需要你指导一下。

我一直在看OAuth,我认为这种类型的实现不是我要寻找的,因为这种实现是针对用户级别的(避免另一个用户违反主要用户数据),不适用于客户端(应用程序)。

因此,如果有人可以在此问题上提供指导,那将有很大帮助。

【问题讨论】:

    标签: c# security hash client-server verification


    【解决方案1】:

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

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

    同样,因为软件需要在客户端机器上运行,任何运行在那里或在网络上发送的东西都会被披露给用户,他可以在不同的客户端上复制它。不可能安全地防止这种情况发生。如果您控制其中一个端点(即客户端),那么 ssl/tls 也无济于事。

    想象一下,如果有可能,软件盗版就不会成为问题 - 但它非常重要。

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多