2016-12-10 8 views
2

ユーザー名とパスワードを保存するためのPython用のpickleファイルは安全ですか?ユーザー名とパスワードを保存するためにpythonを使用するpickleファイルに対して安全ですか?

私は、ユーザー名とパスワードをPythonで保存するのがよい方法を見つけようとしていますか? pickleファイルを使うことはできますか?

ありがとうございます!

+0

だけで永続ではなく、暗号化のためです。そのファイルにアクセスできる人は誰でもPythonを起動し、それをアンピクルできます。 – TigerhawkT3

答えて

3

いいえ、pickleファイルにユーザー名とパスワードを格納するのは安全ではありません。

あるコンピュータで作成されたピクルスファイルは、別のコンピュータで簡単に読み取ることができるため、ファイルにアクセスできる人は誰でも、それをピクルするのに使ったのと同じピクルプログラムを使ってピクルを解除することができます。

理想的には、塩と秘密鍵を使用してパスワードをエンコードする必要があります。これを行うライブラリはbcryptです。

パスワードはファイルに保存しないでください。むしろ、データベースはより安全な選択肢です。塩を使用して自動的にパスワードをハッシュし、データベースに詳細を格納する標準ライブラリも使用します。

se-linuxを使用してデータベースがパスワードで保護され、システムが安全であることを確認してください。ほかに何か??パスワードの保存は避けてください。可能な限り、Google/Fb/Twitterにログインしてください。 :)

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') 
関連する問題