[英]Dynamic SECRET_KEY in Django disadvantages
我剛開始學習 Django,我想知道使用隨機生成的 SECRET-KEY 會有什么缺點。 到目前為止,我已經開始使用此代碼...
from pathlib import Path import random, string
# Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
# Randomized security key size = 100 SECRET_KEY = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase
+ string.punctuation + string.hexdigits + string.digits, k = size))
目前,這似乎適用於我制作的一個簡單博客,但我想知道這在其他用途中可能有什么缺點,以及是否有更好的方法來確保密鑰安全。
提前致謝!
您確實應該使用隨機生成的密鑰,但它不應該在設置中動態生成,因為旋轉密鑰會使活動會話、消息和令牌無效。 從文檔:
密鑰用於:
- 如果您使用的是django.contrib.sessions.backends.cache以外的任何其他會話后端,或者使用默認的get_session_auth_hash() ,則所有會話。
- 如果您使用CookieStorage或FallbackStorage的所有消息。
- 所有PasswordResetView令牌。
- 加密簽名的任何使用,除非提供了不同的密鑰。
如果您輪換您的密鑰,以上所有內容都將失效。 密鑰不用於用戶的密碼,密鑰輪換不會影響他們。
注意:不要使用random.choices()
生成密鑰,因為它不是加密安全的。 您可以為此使用secrets 模塊:
import secrets
import string
choices = string.ascii_letters + string.digits + "<>()[]*?@!#~,.;"
key = "".join(secrets.choice(choices) for n in range(100))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.