2016-05-06 10 views
0

セキュリティからの脆弱性POVは、サーバファイルシステムに格納されているランダムな秘密鍵を持つ以下のソリューションですか?Djangoアプリからのシークレットファイルの書き込み/読み取りのソリューションはどれくらい安全ですか?

import os 
import random 
import string 
import time 

def secret_key_gen(path, max_age=86400): 
    """ 
    Try to load the SECRET_KEY from SECRET_FILE. 
    If that fails, then generate random SECRET_KEY 
    and save it into our SECRET_FILE for future loading. 
    If everything fails, then just raise an exception. 

    Given the app is running by a user with with sufficient rights 
    to write into app directory, key file will be auto-generated 
    the first time it's been looked for. 
    """ 

    SECRET_FILE = os.path.join(path, 'SECURITY_HASH') 
    try:  
     last_modified = os.stat(SECRET_FILE).st_mtime 
     lifespan = (time.time() - last_modified) 

     # update key if file age is older than allowed 
     if lifespan > max_age: 
      raise IOError 

     SECRET_KEY = open(SECRET_FILE).read().strip() 
    except (OSError, IOError): 
     try: 
      l = lambda _: random.SystemRandom().choice(string.printable) 
      SECRET_KEY = ''.join(map(l, range(32))) 
      with open(SECRET_FILE, 'w') as f: 
       f.write(SECRET_KEY) 
     except IOError: 
      raise Exception('Cannot open file `%s` for writing.' % SECRET_FILE) 
    return SECRET_KEY 

# usage 
SECURITY_HASH = secret_key_gen(
    path=os.path.dirname(__file__), 
    max_age=60 * 60 * 24) 

サーバ環境は、マルチスレッドのApacheサーバを実行しているLinuxです。スニペット用

クレジット:https://www.rdegges.com/2011/the-perfect-django-settings-file/

答えて

1

あなたはそのmax_ageの変数を経由してSECRET_KEY設定を変更すると、あなたのアプリに影響を与えるいくつかの結果を持っているかもしれないことを心に留めておくことがあります。このSOの質問は、SECRET_KEYがDjangoで使用されるいくつかの方法について議論しています。

Effects of changing Django's SECRET_KEY

あなたはその設定を変更すると、あなたに影響を与えるような方法で自分のアプリを使用していないことを確認してください可能性があります。

+0

私はあなたの要点を見て、それを強調していただきありがとうございます。予約された名前を避けてください。この特定の質問は、djangoの内部配線とはほとんど関係がありません。フレームワークの内部に何かを隠していないと仮定しましょう。 –

関連する問題