1

Django を使用してデータベースに機密情報を保存する必要があります。

私にはClientモデルがあり、各クライアントにはSocialAccounts、URL、クライアント、およびパスワードを含む一連の (twitter、fb など) があります。

グループ「管理者」に属するすべてのユーザーがパスワードを表示できる必要があることを考慮してください。これらのパスワードをデータベースに保存する安全な方法は何ですか?

4

4 に答える 4

6

したがって、どうやら 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

誰かがこれが役立つことを願っています。

于 2013-05-28T16:39:30.207 に答える
2

可逆暗号化を使用したパスワードの保存は、プレーン テキストとほぼ同じくらい安全です。OAuth などを使用するか、(「もし」ではなく「いつ」ではなく) 誰かがデータベースをハッキングした場合の重大なトラブルに備えます。

于 2013-05-28T15:28:43.907 に答える
1

比較的単純なソリューションとして、 django-encrypted-fieldsを活用できます。

于 2013-05-28T17:50:44.613 に答える