Program Tip

Rails 4에서 secret_key_base의 용도는 무엇입니까?

programtip 2020. 11. 15. 11:40
반응형

Rails 4에서 secret_key_base의 용도는 무엇입니까?


저는 Rails 4를 처음 사용하고 Rails 4에서 secret_key_baseunder 사용을 이해하지 못합니다. config/secrets.yml이 개념을 설명해 주시겠습니까?

내가 프로덕션 환경에서 작업하고 때 또한, 나는를 설정하라는 메시지가 오전 secret_keydevise.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 ,

  1. 앱이 호출되는 경우 Hello, 그리고
  2. 당신은 설정 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

반응형