C# 在客户端和服务器之间保护用户名/密码的最佳做法
有一个应用程序(C#WPF)需要“呼叫总部”并从家庭服务器获取更新的内容。理论上,可能有成千上万的客户需要通过公共互联网进行交流 每个用户将首先使用用户名和密码注册。然后,当应用程序运行时,它会时不时地打电话回家,获取有关新版本、新闻、评论、用户消息以及其他特定于应用程序的信息。这将不是一个“每个人”都可以使用的应用程序,但正如前面提到的,仍然可能有相当多的用户-因此安全性是一个优先事项。我希望很难破门而入,但如果不可能的话,我也会这么做。:) 只需要支持一些基本操作C# 在客户端和服务器之间保护用户名/密码的最佳做法,c#,.net,sql-server,xml,encryption,C#,.net,Sql Server,Xml,Encryption,有一个应用程序(C#WPF)需要“呼叫总部”并从家庭服务器获取更新的内容。理论上,可能有成千上万的客户需要通过公共互联网进行交流 每个用户将首先使用用户名和密码注册。然后,当应用程序运行时,它会时不时地打电话回家,获取有关新版本、新闻、评论、用户消息以及其他特定于应用程序的信息。这将不是一个“每个人”都可以使用的应用程序,但正如前面提到的,仍然可能有相当多的用户-因此安全性是一个优先事项。我希望很难破门而入,但如果不可能的话,我也会这么做。:) 只需要支持一些基本操作 新用户的初始注册 验证用
- 新用户的初始注册
- 验证用户名和密码
- “自[时间戳]以来有什么新内容?”操作
- 客户端发布评论、消息或其他允许的用户生成内容
- 在客户端,我想密码应该存储为散列?还是加密的,有办法找回
- 我认为客户端和服务器之间的HTTPS是一个很好的默认安全层。坏主意?没有
- 是否需要使用此模型实际“登录”?是否应在每个请求中发送用户名/密码组合
- 如果我选择https,在这一点上是否足够安全?或者我还是应该加密一些身份验证的东西
- 服务器提供某种加密“令牌”是否有意义,它可以用作salt(我对这里的术语不太熟悉)来进一步加密用户名/密码
- 基本上,我如何确保这个系统的安全,使客户端或服务器之外的任何人都无法窃取帐户信息?我当然意识到,如果坏人得到了一个正确的配置文件,那么这个帐户就被破坏了。当然,这个系统永远不会允许任何关键操作通过这种通信发生,所有这些都将发生在服务器上;不过,我认为帐户黑客是一个非常非常糟糕的事情,我应该采取一切可能的措施来避免。
谢谢 我认为这只能回答您问题中的“加密”部分,但我今天早上刚刚读了一篇关于Silverlight和.NET中可用于保护敏感信息的加密的精彩文章:
像这样一个宽泛的问题没有简单的答案。您的应用程序可能会遇到许多不同类型的威胁—通常需要执行的操作包括:
- 识别漏洞
- 识别攻击向量
- 确定可能的对策
- 重播攻击(其中记录并重播消息流量)
- 拒绝服务攻击(您的服务器受到格式错误或无效消息的轰炸,试图使其过载)
- 中间人(攻击者在路由中拦截或更改消息的攻击)
微软发布了一个名为的东西,你可能想看看。MSDN还有一个完整的章节,有很多关于此主题的背景和指导。您有两个不同的问题:验证注册用户和设置新用户帐户 验证用户身份 这是最简单的部分。您有几个选择:
- HTTP身份验证(or)。Basic是一个笑话,所以它只剩下《文摘》作为一个严肃的选择
- HTTP NTLM/Kerberos身份验证(又称Windows集成身份验证)是防弹的,前提是您的客户端加入到NT域(不太可能)
- SSL/TLS相互认证
- HTTP“表单”身份验证。不值一提
- 基本的还是