如何保护我的密码安全?

rkr*_*012 1 c# networking communication

我现在有一个(客户端/服务器通信)设置,如下所示:

1)客户端要求用户输入用户名并通过

2)客户端使用端口80(通过Web)将此信息发送到服务器

3)服务器响应说明这是否是正确的密码(correctpass/wrongpass),如果正确,它将向客户端发送加密密钥.

4)客户端向服务器发送一系列命令(所有命令都以服务器提供给客户端的加密密钥开始).

5)服务器检查encryptionKey以识别客户端并响应命令

我的问题是:

这是保持安全的正确方法吗?我不确定来回发送一个加密密钥是否会有任何好处.让客户端生成加密密钥并让服务器验证它会有什么帮助吗?

我想做的事情就像facebook在验证它的应用程序时所做的那样.例如,我可以想象facebook会阻止我通过wireshark或tcp分析器之类的程序窃取原始密码.

如果它很重要,我的程序用c#编写,并使用标准的http来发送/接收数据.

谢谢,

罗希特

Sco*_*ain 5

为了保持您正在做的大部分事情,您只需将步骤更改为

  1. 客户端要求用户输入用户名和密码

  2. 客户端建立与服务器的SSL连接.

  3. 客户端通过SSL连接发送用户名和密码.

  4. 服务器响应说这是否是正确的密码(correctpass/wrongpass).

  5. 客户端向服务器发送一系列命令(所有命令都通过用于发送密码的相同SSL连接发送).

服务器不需要为每条消息重新验证用户的身份,只要您使用一个连续的连接,SSL层就可以在幕后无形地为您完成所有这些工作.


另一方面,Facebook没有像你所描述的那样,他们使用OAuth.以下是OAuth如何工作的基本示例(来自雅虎的开发者页面)

在此输入图像描述

因此,当您编写应用程序时,每个应用程序执行一次步骤1,每个用户执行一次步骤2-4以将应用程序与其帐户关联,然后您只需执行步骤5直到步骤4中收到的令牌过期(可能是任何位置)从几小时到几天,取决于网站).一旦令牌过期,您只需要重复步骤4(或者如果失败,则执行步骤2-4),用户可以再次使用该程序.

第3步是他们输入密码信息的地方,但请注意他们在雅虎网站上输入密码,因此您的程序永远不会触及用户的用户名和密码(这就是OAuth的全部内容!).