在我的Chrome扩展程序中,我向我的服务器发出请求,其中包含敏感信息,即用户的电子邮件和密码,以便将其记录到服务中。一个天真的方法是提出类似
的请求www.myserver.com/login?email=email&pass=pass.
然而,这看起来很可怕。执行此操作的标准,安全方法是什么?
答案 0 :(得分:3)
标准的安全方式是使用加密通道,例如HTTPS。这样,只会看到与https://myserver.com
的连接,并且GET /login?email=email&pass=pass
请求将被加密。
但是,通过仅通过GET请求的参数进行身份验证,您必须在您要访问的每个页面上随身携带它。
通常这可以通过服务器为您提供一个身份验证令牌(例如cookie)来解决,该令牌允许您在登录时访问一段时间。
这种访问令牌通常称为“会话”。它的实现方式差异很大,但通常归结为给你一种密钥来换取有效的登录。
获取有效会话的其他方法包括以明文形式发送用户名,并将密码作为派生密钥发送,例如播种和散列。
如果我的答案中有些内容你不理解,请对其进行评论,我会详细说明或提供更多例子:)
修改强>
在后端,我正在使用来自werkzeug的标准salt + hash python库。如果JS执行相同的操作然后通过 沿着派生密码,这就足够了吗?
是。如果你执行salt + hash方案,你可以使用你想要的任何JS库。我经常只使用本机XmlHTTPRequest来完成它。
另外,您的第一个建议是使用HTTPS。如果我走那条路 返回会话密钥,什么阻止某人窥探 会话密钥?
如果您使用SSL,是什么阻止某人嗅探会话?好吧加密有希望:)一旦建立了SSL连接,你和服务器之间来回的一切都将被加密,所以没有什么可以窥探。 如果没有加密,这就成了一个大问题。当Firebug出来时(还是Firesheep?),还记得有关facebook和嗅探会话cookie的所有模糊信息吗?
当然,您的SSL隧道可能会成为中间人的牺牲品,但像这样的公钥基础设施是您获得的最佳选择。 SSLv3最近被认为是安全的。