2

从我的Chrome扩展中,我向敏感信息(即用户的电子邮件和密码)向服务器发送请求,以便将其登录到服务中。一个天真的做法是做出类似于向敏感数据请求服务器

www.myserver.com/login?email=email&pass=pass. 

这样的要求然而这似乎很糟糕。什么是标准,安全的方式来执行此操作?

回答

3

标准的安全方式是使用加密通道,如HTTPS。这样,只有连接到https://myserver.com将被看到,并且GET /login?email=email&pass=pass请求将被加密。 但是,通过仅通过GET请求的参数进行身份验证,您必须在每个要访问的页面上随身携带它。 通常,这是通过服务器为您提供身份验证令牌(例如cookie)来解决的,该令牌会在您登录时授予您一段时间的访问权限。 此访问令牌通常称为“会话”。它的实现方式差异很大,但通常归结为给你一种密钥来换取有效的登录。

获得有效会话的其他方法包括发送明文用户名和密码作为派生密钥,例如种子和散列。

如果有什么东西在我的答案,你不明白,请对此发表评论,我会阐述或举些例子:)

编辑:

在后端,我正在使用werkzeug python库的标准salt + hash。如果JS执行相同的操作,然后沿派生密码传递 ,那么这是否足够?

是的。如果你使用salt + hash方案,你可以使用任何你想要的JS库。我经常使用本机XmlHTTPRequest来完成它。

此外,您的第一个建议是使用HTTPS。如果我走这条路线,并且 返回会话密钥,那么如何阻止某个人窥探会话密钥 ?

如果您要使用SSL,阻止某人嗅探会话的是什么?那么加密希望:)一旦SSL连接建立后,你和服务器之间来回的所有内容都将被加密,所以没有什么可以窥探的。 虽然没有加密,但这成为一个大问题。当Firebug出来时(或者是Firesheep?),记住所有关于Facebook的模糊和嗅探会话cookie?

当然你的SSL隧道可能会成为中间人的受害者,但这样的公钥基础设施是最好的。最近SSLv3被认为是安全的。

+0

在后端,我使用werkzeug python库中的标准salt + hash。如果JS执行了相同的操作,然后传递派生的密码,那足够了吗?如果是的话,什么js库会相当于?另外,你的第一个建议是使用HTTPS。如果我走这条路线并返回会话密钥,那么如何阻止某人窥探会话密钥? – user592419

+0

@ user592419编辑与您的问题的答案:) –