Rails 4에서 secret_key_base의 용도는 무엇입니까?
저는 Rails 4를 처음 사용하고 Rails 4에서 secret_key_base
under 사용을 이해하지 못합니다. config/secrets.yml
이 개념을 설명해 주시겠습니까?
내가 프로덕션 환경에서 작업하고 때 또한, 나는를 설정하라는 메시지가 오전 secret_key
에 devise.rb
, config.secret_key
그리고 secret_key_base
. 그러나 rake secret
명령을 사용하여 새 암호를 생성 할 수 있습니다 .
개발 환경과 프로덕션 환경의 차이점은 무엇입니까?
생성 secret_key
할 때 secret_key_base
마다 추가 할 때 새로 생성 된 것과 어떻게 일치 합니까?
다른 서버로 애플리케이션을 어떻게 보호합니까?
secret_token.rb
파일의 내용이 긴 무작위 문자열이 포함 서명 쿠키의 무결성을 확인하는 데 사용됩니다 (사람들이 웹 응용 프로그램에 로그인 할 때 같은 사용자 세션 등을).
문서 내용 :
secret_token.rb
초기화 프로그램 의 기존 secret_key_base를 사용하여 프로덕션 모드에서 Rails 앱을 실행하는 사용자에 대해 SECRET_KEY_BASE 환경 변수를 설정합니다. 또는 기존 secret_key_base를secret_token.rb
이니셜 라이저에서 프로덕션 섹션의 secrets.yml로 복사 하여<%= ENV["SECRET_KEY_BASE"] %>
.
중요한 파일이고 .gitignore에 넣을 수 없기 때문에 env 변수를 사용하여 secret_key_base
값 을 저장하는 것이 좋습니다 .
작성 .env
또는 .powenv
파일링하고 다음으로 저장하십시오.
export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
그리고 config/initializers/secret_token.rb
YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments
('a' * 30) # should be at least 30 chars long
else
ENV['SECRET_TOKEN']
end
이 기사 는 (약간 오래되고) 길지만 주제에 대한 유용한 정보로 가득합니다.
업데이트 04.05.15
Rails 4.2부터는 더 이상 secret_token.rb
파일 이 없습니다 . 새로운 규칙에 따라 config/secrets.yml
애플리케이션의 비밀을 저장 하는 파일이 있습니다.
혁신에 따라 기존 앱을 4.2.x로 업그레이드하는 방법을 읽어보십시오 .
기술적으로의 목적은 secrect_key_base
응용 프로그램의 key_generator
메서드 (check Rails.application.key_generator
)에 대한 비밀 입력이되는 것 입니다.
애플리케이션의 key_generator
, 따라서 secret_key_base
는 Rails 프레임 워크 내의 세 가지 핵심 기능에서 사용됩니다.
- 를 통해 액세스 할 수있는 암호화 된 쿠키에 대한 파생 키
cookies.encrypted
. - 를 통해 액세스 할 수있는 HMAC 서명 쿠키의 키를 가져옵니다
cookies.signed
. - 모든 애플리케이션의 명명 된
message_verifier
인스턴스에 대한 키 파생 .
@michaeljcoyne 의 기사 에서 세 가지 각각에 대해 자세히 알아 보십시오 .
secret_key_base는 세션을 암호화하고 서명하는 데 사용됩니다.
세션을 쿠키로 안전하게주고 받기 위해
에서 레일 4 ,
- 앱이 호출되는 경우
Hello
, 그리고 - 당신은 설정
session['a'] = 'b'
,
쿠키는 다음과 같습니다.
_Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689
다음과 같이 번역됩니다.
_Hello_session=<encrypted a=b>--<digital signature>
쿠키는 서버에 의해 설정되고 클라이언트 측에서 유지되며 브라우저는 페이지를 요청할 때마다 설정된 쿠키를 서버에 다시 보냅니다.
악한 사람들이 a=b
문자열 을 이해하는 것을 방지하기 위해 암호화됩니다 .
악의적 인 사람들이 쿠키를 변조하는 것을 방지하기 위해 디지털 서명 이 사용됩니다.
두 경우 모두 secret_key_base 값이 사용됩니다 (a = b 암호화 / 복호화 및 디지털 서명 유효성 검사).
참고 URL : https://stackoverflow.com/questions/25426940/what-is-the-use-of-secret-key-base-in-rails-4
'Program Tip' 카테고리의 다른 글
.Wait () 대 .GetAwaiter (). GetResult ()의 차이점은 무엇입니까? (0) | 2020.11.15 |
---|---|
연동 및 휘발성 (0) | 2020.11.15 |
ASP.NET 5, .NET Core 및 ASP.NET Core 5의 차이점은 무엇입니까? (0) | 2020.11.15 |
MySQL에 대한 최적의 varchar 크기는 무엇입니까? (0) | 2020.11.15 |
JPA 병합 대 지속 (0) | 2020.11.15 |