python使用pickle文件存储用户名和密码是否安全?

时间:2016-12-10 06:55:26

标签: python pickle

python使用pickle文件存储用户名和密码是否安全?

我试着弄清楚在python中存储用户名和密码的好习惯是什么?我可以使用pickle文件吗?

谢谢!

2 个答案:

答案 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就更好了。

Here's how you can do that

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')