Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在客户端和服务器之间保护用户名/密码的最佳做法_C#_.net_Sql Server_Xml_Encryption - Fatal编程技术网

C# 在客户端和服务器之间保护用户名/密码的最佳做法

C# 在客户端和服务器之间保护用户名/密码的最佳做法,c#,.net,sql-server,xml,encryption,C#,.net,Sql Server,Xml,Encryption,有一个应用程序(C#WPF)需要“呼叫总部”并从家庭服务器获取更新的内容。理论上,可能有成千上万的客户需要通过公共互联网进行交流 每个用户将首先使用用户名和密码注册。然后,当应用程序运行时,它会时不时地打电话回家,获取有关新版本、新闻、评论、用户消息以及其他特定于应用程序的信息。这将不是一个“每个人”都可以使用的应用程序,但正如前面提到的,仍然可能有相当多的用户-因此安全性是一个优先事项。我希望很难破门而入,但如果不可能的话,我也会这么做。:) 只需要支持一些基本操作 新用户的初始注册 验证用

有一个应用程序(C#WPF)需要“呼叫总部”并从家庭服务器获取更新的内容。理论上,可能有成千上万的客户需要通过公共互联网进行交流

每个用户将首先使用用户名和密码注册。然后,当应用程序运行时,它会时不时地打电话回家,获取有关新版本、新闻、评论、用户消息以及其他特定于应用程序的信息。这将不是一个“每个人”都可以使用的应用程序,但正如前面提到的,仍然可能有相当多的用户-因此安全性是一个优先事项。我希望很难破门而入,但如果不可能的话,我也会这么做。:)

只需要支持一些基本操作

  • 新用户的初始注册
  • 验证用户名和密码
  • “自[时间戳]以来有什么新内容?”操作
  • 客户端发布评论、消息或其他允许的用户生成内容
服务器端的东西将在一个Win2008服务器与IIS7。在我为项目所用的时间里,我几乎没有WCF所需的知识来实现这一点,因此我将用XML文件来来回使用ASP.NET MVC 2。如果你只有一把锤子

我正在寻找的是关于如何尽可能安全地执行此操作而不使其无法使用的建议。客户端的配置将保存在XML文件中。在服务器端,大多数东西都将驻留在SQL server中

我意识到这在某种程度上是一个意见问题,但我也相信有可能达到某种最佳实践,在这种实践中,我可以晚上睡觉,而不用担心clientserver通信和用户帐户被劫持等问题

  • 在客户端,我想密码应该存储为散列?还是加密的,有办法找回
  • 我认为客户端和服务器之间的HTTPS是一个很好的默认安全层。坏主意?没有
  • 是否需要使用此模型实际“登录”?是否应在每个请求中发送用户名/密码组合
  • 如果我选择https,在这一点上是否足够安全?或者我还是应该加密一些身份验证的东西
  • 服务器提供某种加密“令牌”是否有意义,它可以用作salt(我对这里的术语不太熟悉)来进一步加密用户名/密码
  • 基本上,我如何确保这个系统的安全,使客户端或服务器之外的任何人都无法窃取帐户信息?我当然意识到,如果坏人得到了一个正确的配置文件,那么这个帐户就被破坏了。当然,这个系统永远不会允许任何关键操作通过这种通信发生,所有这些都将发生在服务器上;不过,我认为帐户黑客是一个非常非常糟糕的事情,我应该采取一切可能的措施来避免。
有什么好主意吗


谢谢

我认为这只能回答您问题中的“加密”部分,但我今天早上刚刚读了一篇关于Silverlight和.NET中可用于保护敏感信息的加密的精彩文章:

以下是文章的部分内容:

当然,第一步是找到足够强的加密协议,该协议可以在Silverlight和.NET中实现,并且在两个运行时之间完全兼容。我打算使用AES加密。AES代表“高级加密标准”。本标准被美国政府和标准机构广泛使用和批准


像这样一个宽泛的问题没有简单的答案。您的应用程序可能会遇到许多不同类型的威胁—通常需要执行的操作包括:

  • 识别漏洞
  • 识别攻击向量
  • 确定可能的对策
在决定是否使用SSL、HTTPS、加密或任何其他技术之前,您需要了解每种技术可以缓解哪些威胁,以及它们是如何被破坏的

虽然存在安全方面的最佳实践,但您不能仅仅按照配方来保护系统

一般来说,您提到了一些保护应用程序安全的合理对策(密码散列,HTTPS),但问题在于细节。有时你必须考虑这样的场景:

  • 重播攻击(其中记录并重播消息流量)
  • 拒绝服务攻击(您的服务器受到格式错误或无效消息的轰炸,试图使其过载)
  • 中间人(攻击者在路由中拦截或更改消息的攻击)
有许多其他攻击向量(以及可能的对策)要考虑。您所付出的努力取决于所保护资源的重要性、资源受损的后果,以及您的技能水平和对安全环境的理解


微软发布了一个名为的东西,你可能想看看。MSDN还有一个完整的章节,有很多关于此主题的背景和指导。

您有两个不同的问题:验证注册用户和设置新用户帐户

验证用户身份 这是最简单的部分。您有几个选择:

  • HTTP身份验证(or)。Basic是一个笑话,所以它只剩下《文摘》作为一个严肃的选择
  • HTTP NTLM/Kerberos身份验证(又称Windows集成身份验证)是防弹的,前提是您的客户端加入到NT域(不太可能)
  • SSL/TLS相互认证
  • HTTP“表单”身份验证。不值一提
  • 基本的还是