首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何保护我的密码安全?

如何保护我的密码安全?
EN

Stack Overflow用户
提问于 2012-05-17 04:37:45
回答 2查看 172关注 0票数 1

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

1)客户端要求用户提供用户名和通行证

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

3)服务器响应这是否是正确的密码(正确的密码/错误的密码),如果正确,它将向客户端发送加密密钥。

4)客户端向服务端发送一系列命令(所有命令都以服务端给客户端的加密密钥开头)。

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

我的问题是:

这是保证安全的正确方法吗?我不确定来回发送单个加密密钥是否会有任何好处。让客户端生成加密密钥并让服务器对其进行验证是否更有帮助?

我想要做的就是像facebook一样认证它的应用程序。例如,我可以想象facebook做了一些事情来防止我通过wireshark或tcp分析器之类的程序窃取原始密码。

如果重要的话,我的程序是用c#编写的,使用标准的http来发送/接收数据。

谢谢,

Rohit

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 04:51:25

要使您正在做的大多数事情保持不变,只需将您的步骤更改为

  1. Client要求用户输入用户名和密码。(correctpass/wrongpass).
  2. Client
    1. Client通过SSL客户端发送用户名和密码。
    2. 客户端通过SSL响应这是否是正确的密码,并向服务器发送一系列命令(所有命令都通过用于发送密码的同一个

    连接发送)。

服务器不需要在每封邮件中都重新验证用户的身份,只要您使用的是一个连续连接,SSL层就会在幕后为您执行所有这些工作。

另外,Facebook并不像你所描述的那样,他们使用OAuth。这是一个基本的OAuth如何工作的例子(来自雅虎的developer page)

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

步骤3是他们输入密码信息的地方,但请注意,他们是在雅虎网站上输入密码的,所以您的程序永远不会接触到用户的用户名和密码(这就是OAuth!的全部要点)。

票数 5
EN

Stack Overflow用户

发布于 2012-05-17 07:45:55

以下是几个通用的指针:

正如其他人指出的那样,如果可能,请使用SSL。

您不应该以明文形式存储密码。相反,存储原始密码的散列,并在比较之前重新散列任何接收到的密码。如果您不能使用SSL,请让客户端在传输之前对密码进行哈希处理(使用MD5或类似方法)。

如果客户端是应用程序(不是浏览器中的页面),但您不能使用SSL,则客户端和服务器可以共享可用于加密传输的秘密。秘密当然永远不应该被发送,而是在例如AES加密中用作密钥。

在您的方案中,您可以使用例如由共享密钥、客户端IP地址和当前命令(或其子集)组成的字符串的散列,并将散列与命令一起传输,以便不断向服务器验证您自己。

但是,如果可能的话,请使用SSL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10626335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档