Django を使用してデータベースに機密情報を保存する必要があります。
私にはClient
モデルがあり、各クライアントにはSocialAccounts
、URL、クライアント、およびパスワードを含む一連の (twitter、fb など) があります。
グループ「管理者」に属するすべてのユーザーがパスワードを表示できる必要があることを考慮してください。これらのパスワードをデータベースに保存する安全な方法は何ですか?
Django を使用してデータベースに機密情報を保存する必要があります。
私にはClient
モデルがあり、各クライアントにはSocialAccounts
、URL、クライアント、およびパスワードを含む一連の (twitter、fb など) があります。
グループ「管理者」に属するすべてのユーザーがパスワードを表示できる必要があることを考慮してください。これらのパスワードをデータベースに保存する安全な方法は何ですか?
したがって、どうやら django-extensions には、まさにこの目的のために 2 つのフィールドがあります。
- EncryptedCharField - データベースに出入りするときにその値を透過的に暗号化する CharField。暗号化は Keyczar によって処理されます。このフィールドを使用するには、Keyczar をインストールし、プライマリ暗号化キーを生成し、settings.KEYS_DIR をキー ディレクトリのフル パスに設定する必要があります。
- EncryptedTextField - データベースに出入りするときにその値を透過的に暗号化する CharField。暗号化は Keyczar によって処理されます。このフィールドを使用するには、Keyczar をインストールし、プライマリ暗号化キーを生成し、settings.KEYS_DIR をキー ディレクトリのフル パスに設定する必要があります。
したがって、基本的には、(1) keyczar とその依存関係を pythonにインストールする必要がありました。
pip install https://keyczar.googlecode.com/files/python-keyczar-0.71c.tar.gz
pip install pycrypto
pip install pyasn1
(まだ持っていない場合は... django-extensions もインストールしてください。)
(2)キーを保存するディレクトリを作成し、キーを作成します。
mkdir keys
python path/to/keyczart.py create --location='keys' --purpose='crypt' --name='whatever_name'
python path/to/keyczart.py addkey --location='keys' --status='primary'
(3)ディレクトリを ENCRYPTED_FIELD_KEYS_DIR の下の settings.py に追加します。
最後に(4) EncryptedCharField または EncrytedTextField をモデルに追加します。
from django_extensions.db.fields.encrypted import EncryptedCharField
class SocialAccount(models.Model):
platform = models.ForeignKey(SocialPlatformType,
related_name='platforms')
url = models.URLField('Account url', unique=True,
null=True, blank=True)
password = EncryptedCharField(null=True, blank=True, max_length=255)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
def __unicode__(self):
return self.url
誰かがこれが役立つことを願っています。
可逆暗号化を使用したパスワードの保存は、プレーン テキストとほぼ同じくらい安全です。OAuth などを使用するか、(「もし」ではなく「いつ」ではなく) 誰かがデータベースをハッキングした場合の重大なトラブルに備えます。