tutorial template tag languages dateformat custom python django security encryption

python - template - Propósito de Django configuración ''SECRET_KEY''



inclusion tags django (2)

¿Cuál es exactamente el objetivo de SECRET_KEY en django? Hice algunas búsquedas en Google y revisé los documentos ( https://docs.djangoproject.com/en/dev/ref/settings/#secret-key ), pero estaba buscando una explicación más detallada de esto, y por qué es requerido.

Por ejemplo, ¿qué podría pasar si la clave se viera comprometida / otros supieran qué era? Gracias.


La documentación de Django para la firma criptográfica cubre los usos de la configuración ''SECRET_KEY'':

Este valor [la configuración SECRET_KEY ] es la clave para proteger los datos firmados; es vital que lo mantenga seguro, o los atacantes podrían usarlo para generar sus propios valores firmados.

(Esta sección también se referencia desde la documentación de Django para la configuración ''SECRET_KEY'' ).

La API de firma criptográfica en Django está disponible para cualquier aplicación para firmas criptográficamente seguras en valores. Django mismo hace uso de esto en varias características de nivel superior:

  • Firma de datos serializados (por ejemplo, documentos JSON).

  • Tokens únicos para una sesión de usuario, solicitud de restablecimiento de contraseña, mensajes, etc.

  • Prevención de ataques entre sitios o repetición agregando (y luego esperando) valores únicos para la solicitud.

  • Generando una sal única para funciones hash.

Entonces, la respuesta general es: hay muchas cosas en una aplicación Django que requieren una firma criptográfica, y la configuración ''SECRET_KEY'' es la clave que se usa para eso. Necesita tener una cantidad de entopia criptográficamente fuerte (difícil de adivinar para las computadoras) y única entre todas las instancias de Django.


Se usa para hacer hashes. Mira:

>grep -Inr SECRET_KEY * conf/global_settings.py:255:SECRET_KEY = '''' conf/project_template/settings.py:61:SECRET_KEY = '''' contrib/auth/tokens.py:54: hash = sha_constructor(settings.SECRET_KEY + unicode(user.id) + contrib/comments/forms.py:86: info = (content_type, object_pk, timestamp, settings.SECRET_KEY) contrib/formtools/utils.py:15: order, pickles the result with the SECRET_KEY setting, then takes an md5 contrib/formtools/utils.py:32: data.append(settings.SECRET_KEY) contrib/messages/storage/cookie.py:112: SECRET_KEY, modified to make it unique for the present purpose. contrib/messages/storage/cookie.py:114: key = ''django.contrib.messages'' + settings.SECRET_KEY contrib/sessions/backends/base.py:89: pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest() contrib/sessions/backends/base.py:95: if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check: contrib/sessions/backends/base.py:134: # Use settings.SECRET_KEY as added salt. contrib/sessions/backends/base.py:143: settings.SECRET_KEY)).hexdigest() contrib/sessions/models.py:16: pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest() contrib/sessions/models.py:59: if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check: core/management/commands/startproject.py:32: # Create a random SECRET_KEY hash, and put it in the main settings. core/management/commands/startproject.py:37: settings_contents = re.sub(r"(?<=SECRET_KEY = '')''", secret_key + "''", settings_contents) middleware/csrf.py:38: % (randrange(0, _MAX_CSRF_KEY), settings.SECRET_KEY)).hexdigest() middleware/csrf.py:41: return md5_constructor(settings.SECRET_KEY + session_id).hexdigest()