我正在使用谷歌应用引擎开发一个网站,我想知道处理提交的正确方法是什么。
我正在考虑做一些事情,比如用一些盐对密码客户端进行散列,然后在服务器端用一些其他盐再次对其进行散列。
我想知道这是否至少是一些不错的安全性,以及它是否已经存在一个可以做到这一点或更好的 Python 库。
我正在使用谷歌应用引擎开发一个网站,我想知道处理提交的正确方法是什么。
我正在考虑做一些事情,比如用一些盐对密码客户端进行散列,然后在服务器端用一些其他盐再次对其进行散列。
我想知道这是否至少是一些不错的安全性,以及它是否已经存在一个可以做到这一点或更好的 Python 库。
标准做法是对连接使用 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()
函数来识别使用的哈希算法。
您正在寻找摘要式身份验证。Digest Auth 是安全的,这意味着密码不会以明文形式传输。但是,认证后的通信没有加密。
在此处查看完整示例:http: //code.activestate.com/recipes/302378-digest-authentication/