python使用pickle文件存储用户名和密码是否安全?
我试着弄清楚在python中存储用户名和密码的好习惯是什么?我可以使用pickle文件吗?
谢谢!
答案 0 :(得分:3)
没有。在pickle文件中存储用户名和密码是不安全的。
因为在一台计算机上创建的pickle文件可以在另一台计算机上轻松读取。任何能够访问该文件的人都可以使用您用来腌制它的相同的pickle程序取消它。
理想情况下,您应该使用salt和密钥对密码进行编码。有bcrypt个库可以做到这一点。
理想情况下,您不应将密码存储在文件中。相反,数据库是一种更安全的选择。还可以使用标准库,使用salt自动散列密码并在数据库中存储详细信息。
确保数据库受密码保护,使用se-linux确保系统安全。还有什么??是的,避免存储密码。尽可能使用google / Fb / Twitter登录。 :)
答案 1 :(得分:1)
为Vikash的优秀答案提供示例。
Secure Password Storage in Python:
import bcrypt
import hmac
from getpass import getpass
master_secret_key = getpass('tell me the master secret key you are going to use')
# Calculating a hash
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
# Validating a hash (don't use ==)
if (hmac.compare_digest(bcrypt.hashpw(password, hashed), hashed)):
# Login successful
现在有了盐和哈希密码,你需要将它存储在磁盘上的某个地方。你在哪里存储它,you should set the file permissions to 600(仅由用户读/写)。如果您打算不允许更改密码,那么400就更好了。
import os
import stat
# Define file params
fname = '/tmp/myfile'
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL # Refer to "man 2 open".
mode = stat.S_IRUSR | stat.S_IWUSR # This is 0o600 in octal and 384 in decimal.
# For security, remove file with potentially elevated mode
try:
os.remove(fname)
except OSError:
pass
# Open file descriptor
umask_original = os.umask(0)
try:
fdesc = os.open(fname, flags, mode)
finally:
os.umask(umask_original)
# Open file handle and write to file
with os.fdopen(fdesc, 'w') as fout:
fout.write('something\n')