3

我正在使用谷歌应用引擎开发一个网站,我想知道处理提交的正确方法是什么。

我正在考虑做一些事情,比如用一些盐对密码客户端进行散列,然后在服务器端用一些其他盐再次对其进行散列。

我想知道这是否至少是一些不错的安全性,以及它是否已经存在一个可以做到这一点或更好的 Python 库。

4

3 回答 3

6

标准做法是对连接使用 SSL 加密(例如 https),然后在服务器端使用盐对其进行哈希处理。当稍后用户登录时,您仍必须验证密码,并且从浏览器向服务器发送密码的哈希与发送密码本身一样不安全;拦截其中任何一个的攻击者仍然可以以该用户身份登录。

有一个名为的 python 包passlib可以为您处理各种形式的密码散列和加盐:

from passlib.hash import sha256_crypt
hashed = sha256_crypt.encrypt(password)

将选择的算法包含在存储的密码哈希中通常是一个好主意;RFC 2307 密码(在 LDAP 中使用)使用{SCHEME}前缀,其他哈希方案使用 unix$digit$前缀,其中 digit 是一个数字;sha256上面代码片段中的方案$5$用作前缀。

这样,您可以在以后升级您的密码方案,同时仍然支持旧方案,方法是选择正确的散列算法在以后验证密码。

大多数passlib散列方案已经返回带有标准前缀的散列,记录在每个方案的详细文档页面中。当您稍后需要根据输入的密码验证密码哈希时,您可以使用该.identify()函数来识别使用的哈希算法。

于 2012-09-16T08:13:50.020 回答
0
  1. 使用 TLS (HTTPS)。它并不完美,但总比没有好(而且比摘要式身份验证要好得多)。
  2. 如果您不想存储密码,可以让 Google 处理一切:https ://developers.google.com/appengine/articles/auth
  3. 如果您确实想担心存储密码,请使用 passlib,如 Martijn Pieters 所述。
于 2013-09-26T18:41:54.473 回答
-2

您正在寻找摘要式身份验证。Digest Auth 是安全的,这意味着密码不会以明文形式传输。但是,认证后的通信没有加密。

在此处查看完整示例:http: //code.activestate.com/recipes/302378-digest-authentication/

于 2012-09-16T07:57:29.667 回答