3

GAE/python2.7 アプリにパスワード ストレージを実装する必要があります。私はすでに認証用の Cookie を実装しており、すでにアカウント/ユーザー モデルを持っており、サード パーティによる認証も既に持っています。ここで、パスワードによる認証を追加する必要があります (顧客の要求)。

パスワードを安全に保管したい。いくつかのオプション (以下) を特定しましたが、それは賢明だと思われますが、これまでパスワード ストレージを実装したことがないため、何がわからないのかわかりません。問題が発生するのを待つより、問題を回避したい。

私の質問は: これは GAE のベスト プラクティスですか? そうでない場合、何ですか?

保存する前にパスワードをハッシュして比較する方法だけを探していることに注意してください。フルスタックのユーザー モジュールは必要ありません。

役立つ以前の質問を既に確認しましたが、問題を直接解決することはできません。

オプション:

  1. Djangoを使用します。何かのようなもの

    import django.contrib.auth.hashers as foo
    to_store_in_db = foo.make_password(conforming_password)
    
    # later
    
    passes = foo.check_password(entered_password, password_from_db)
    

    (現在、アプリで Django を使用していないため、好きな方を使用できますが、1.4 を提案しています。これは、GAE で利用可能な最新のものであり、'latest' の移動ターゲットではないためです)

  2. webapp2_extras.securityを使用- 上記と同様ですが、

    generate_password_hash() #Seems like it only supports md5/sha1
    check_password_hash()
    

ありがとう

トム

4

1 に答える 1

2

そのための組み込み関数があります: https://docs.python.org/2/library/hashlib.html#key-derivation-function

>>> import hashlib, binascii
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
>>> binascii.hexlify(dk)

b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'

ソルトは、パスワードとともにデータベースに保存されるランダムな文字列です。これはsha256、この目的には十分と思われるものを使用します。

適切な (安全にランダムな) sald を取得することは問題になる可能性がありますが、新しいバージョンの GAE では、pycrypto 依存関係を指定して、次を使用できます。

from Crypto.Random import get_random_bytes 
于 2014-09-12T22:27:54.390 に答える