Edit: Esta resposta é baseada no django 1.5
SECRET_KEY
é usado em vários lugares, vou apontar primeiro o que é impactado por ela e depois tentar revisar a lista e fornecer explicações precisas do impacto.
A lista de itens usando SECRET_KEY
direta ou indiretamente:
Na realidade, muitos dos itens listados aqui são usados SECRET_KEY
através dos django.utils.crypt.get_random_string()
quais são usados para propagar o mecanismo aleatório. Isso não será afetado por uma alteração no valor de SECRET_KEY
.
A experiência do usuário diretamente impactada por uma mudança de valor é:
- sessões, a decodificação de dados será interrompida, válida para qualquer back-end de sessão (cookies, banco de dados, arquivo ou cache).
- o token de redefinição de senha já enviado não funcionará, os usuários terão que solicitar um novo.
- o formulário de comentários (se estiver usando
django.contrib.comments
) não validará se foi solicitado antes da alteração do valor e enviado após a alteração do valor. Eu acho que isso é muito pequeno, mas pode ser confuso para o usuário.
- as mensagens (de
django.contrib.messages
) não validarão o servidor nas mesmas condições de tempo do formulário de comentários.
ATUALIZAÇÃO : agora trabalhando no django 1.9.5, uma rápida olhada na fonte me dá praticamente as mesmas respostas. Pode fazer uma inspeção completa mais tarde.
data decode will break
e talvez apontar algum código (no django ou no exemplo de projeto) que será quebrado? EDIT: ainda usando o django 1.4 - é esse o caso?SECRET_KEY
é usado nosalted_hmac
hash dos dados da sessão.<algorithm>$<iterations>$<salt>$<hash>
em auth_user, portanto, o salt aleatório é armazenado ao lado da senha em cada caso.Desde que esta pergunta foi feita, a documentação do Django foi alterada para incluir uma resposta.
Não estava claro para mim exatamente como eu deveria girar a chave secreta. Eu encontrei uma discussão sobre como o Django gera uma chave para um novo projeto , bem como um Gist que discute outras opções . Finalmente decidi pedir ao Django para criar um novo projeto, copiar a nova chave secreta no meu projeto antigo e depois apagar o novo projeto .
Atualizar
Parece que o Django adicionou a
get_random_secret_key()
função na versão 1.10. Você pode usar isso para gerar uma nova chave secreta.fonte
startproject
, poderá ver que ele apenas gera uma sequência aleatória usando ocrypto
módulo.De acordo com esta página https://docs.djangoproject.com/en/dev/topics/signing/ , o SECRET_KEY é usado principalmente para itens transitórios - assinando dados enviados por fio, para que você possa detectar violações, por exemplo. Parece que as coisas que poderiam quebrar são:
Alguém com uma experiência Django mais recente e / ou mais destacada do que eu pode gritar de outra forma, mas suspeito que, a menos que você esteja explicitamente fazendo algo com a API de assinatura, isso deve criar apenas um pequeno inconveniente para seus usuários.
fonte
A cadeia SECRET_KEY é usada principalmente para criptografar e / ou hash de dados de cookies. Muitas estruturas (incluindo o Django) chegam a isso, já que os cookies de sessão padrão têm suas próprias desvantagens.
Imagine que você tenha um formulário no django para editar artigos com um campo oculto. Nesse campo oculto, está armazenado o ID do artigo que você está editando. E se você quiser ter certeza de que ninguém pode enviar outra identificação de artigo, você adicionará um campo oculto extra com a identificação de hash. Portanto, se alguém alterar o ID, você saberá porque o hash não será o mesmo.
Claro que este é um exemplo trivial, mas é assim que o SECRET_KEY é usado.
O Django está usando-o internamente, por exemplo, para {% csrf_token%} e mais algumas coisas. Realmente não deve ter nenhum impacto no seu aplicativo se você o alterar, com base na sua pergunta e se não o estiver usando.
A única coisa é que talvez os valores da sessão sejam descartados. Por exemplo, os usuários terão que entrar no admin novamente, porque o django não poderá decodificar a sessão com uma chave diferente.
fonte
Eu cometi esse mesmo erro. A senha padrão era 50, então usei o powershell para gerar uma sequência aleatória de 50 e substitui a antiga SECRET_KEY por ela. Eu estava conectado e, após substituir o SECRET_KEY, minha sessão anterior foi invalidada.
Com o Powershell ( fonte ):
Com o Bash ( fonte ):
Nesse ponto, pensei em por que não tentar uma chave maior, então tentei com uma chave longa de 100 e 1000. Ambos funcionaram. Se eu entendo o código fonte , o objeto retornado pela função signatário é um hash hmac em base64. A RFC 2104 tem isso a dizer para o comprimento necessário de uma chave secreta do HMAC.
Para traduzir para a fala normal, o tamanho da chave secreta precisa ter o mesmo tamanho da saída. A chave também precisa estar em bits. Cada dígito em base64 representa 6 bits. Portanto, se você tivesse uma senha de 50 caracteres, teria uma chave secreta de 50 x 6 = 300 bits. Se você estiver usando o SHA256, precisará de uma chave de 256 bits ( sha256 usa 256 bits por definição ). Portanto, uma senha longa de 50 deve funcionar, a menos que você planeje usar um algoritmo de hash maior que o SHA256.
Mas, como qualquer bit extra na chave está sendo hash, seu tamanho não diminui drasticamente o desempenho. Mas isso garantiria que você tenha bits suficientes para funções hash maiores. O SHA-512 seria coberto por um SECRET_KEY de 100 comprimentos ( 50 x 6 = 600 bits> 512 bits ).
fonte