【问题标题】:Secure Communication Between .Net Application and Website.Net 应用程序和网站之间的安全通信
【发布时间】:2014-04-22 03:39:33
【问题描述】:

最近,我们开发了一个应用程序,我们希望它的用户按月付费才能使用它。因此,我们首先想到的是如何为我们的应用程序实施一种安全的方式来检查用户的有效性,然后这些想法就出现了

  1. 使用WebClient进入我们的网站和Login使用用户 提供的凭据:但是,这可能容易受到 MITM 的攻击 攻击。
  2. 使用第一种方法但使用SSL 证书(以确保 我们正在连接到我们的服务器而不是攻击者): 但是,Fiddler 可以轻松进行MITM 攻击并解密SSL 通信,这将导致与 第一种方法。

由于互联网缺乏我们需要什么的文档,我们不得不在这里请人解释我们如何确保:

  1. 我们的应用程序only 连接到我们的服务器,而不是任何虚假托管 服务器(由攻击者)。
  2. 通信是安全的。没有改变或编辑一些如何为了 严重不公平地访问我们的应用程序。 (通过发送虚假响应 到应用程序或在应用程序接收之前编辑原始响应)。

Note: we totally understand that the attacker may just deobfuscate the application and do whatever he want to it. So we are planning to get a goodobfuscatorin order to at least make it harder for the attacker to do so.

【问题讨论】:

  • “Fiddler 可以轻松地进行 MITM 攻击”...不,它不能。用户必须明确批准提琴手根证书为受信任,并且有大而胖的警告标志告诉他们这是一个非常糟糕的主意。
  • @spender:没关系;用户是这里的敌人。
  • 确实如此。我的偏好是将黄金保留在服务器上。客户本质上是不可信的。让用户为数据访问付费,而不是为应用本身付费。
  • @spender:问题在于应用程序并非设计为依赖于服务器。这就是为什么我们试图至少实现一个安全的登录系统。
  • @spender 还会创建一个处理某些功能的套接字服务器(使应用程序依赖于我们的服务器)是否容易受到 MATM 之类的攻击?

标签: c# security


【解决方案1】:

您可以使用 SSL 证书固定。

ServerCertificateValidationCallback 设置为仅接受您证书的公钥或其签名者之一。 (这意味着您永远不能更改证书)

这将完全阻止 SSL MITM(通过使用不同的证书并让计算机信任它来工作)。

当然,它并不能阻止攻击者破解打开您的应用程序并完全绕过检查,尤其是在您存储本地状态时。

【讨论】:

  • 我能就这个话题和你聊一聊吗,因为我有一些问题。顺便说一句,我不会占用你很多时间:p
  • 所以...通过使用证书固定,我可以确保消除问题中描述的问题(如编辑和更改请求等?)
  • +1。带有客户端证书的 HTTPS 是对双方进行身份验证的简单且安全的解决方案。 @RuneS - 请注意,您尝试构建的安全性甚至超过了所有银行网站的要求 - 您需要了解您试图阻止的威胁 - 比单个 SO 问题所能涵盖的主题要大得多。
  • @RuneS - 不,你只会让它变得更难一点(即 Fiddler 需要额外的配置来提供客户端证书) - 你不能真正阻止用户查看/更改自己的流量。跨度>
  • @AlexeiLevenkov 我不是在说PREVENT,而是尽可能地让它变得更难。
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2023-03-15
  • 2018-06-20
相关资源
最近更新 更多