Недостатки динамического SECRET_KEY в Django

Я только начал изучать 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))

На данный момент это, кажется, хорошо работает для простого блога, который я сделал, но мне интересно, какие недостатки это может иметь в других случаях и есть ли лучшие способы сделать ключ безопасным.

Заранее спасибо!

Вам действительно следует использовать секретный ключ случайной генерации, но он не должен генерироваться динамически в настройках, так как ротация ключа аннулирует активные сессии, сообщения и токены. Из документации:

Секретный ключ используется для:

Если вы измените свой секретный ключ, все вышеперечисленные действия будут недействительны. Секретные ключи не используются для паролей пользователей, и поворот ключа не не влияет на них.

Примечание: Не используйте random.choices() для генерации секретного ключа, так как он не является криптографически безопасным. Для этого можно использовать модуль secrets:

import secrets
import string

choices = string.ascii_letters + string.digits + "<>()[]*?@!#~,.;"
key = "".join(secrets.choice(choices) for n in range(100))
Вернуться на верх