development

Rails에서 force_ssl은 무엇을합니까?

big-blog 2020. 10. 12. 07:49
반응형

Rails에서 force_ssl은 무엇을합니까?


이전 질문에서 나는 nginx ssl 종료를 설정하고 Rails가 암호화 된 데이터를 처리하지 않도록해야한다는 것을 알았습니다.

그렇다면 다음은 왜 존재합니까?

config.force_ssl = true

프로덕션 구성 파일에서 주석 처리 된 것을 봅니다. 그러나 예상대로 nginx가 모든 SSL 작업을 처리하여 레일 앱이 암호화 된 데이터를 처리하지 않도록하려면 어떻게 config.force_ssl = true해야합니까?

내가 항상 nginx를 사용한다는 것을 알고 있다면 프로덕션에서 주석 처리 된 상태로 두어야합니까?


그것은하지 않습니다 단지 HTTPS로 리디렉션 HTTP 브라우저를 강제로. 또한 쿠키를 "보안"으로 표시하도록 설정 하고 각 SSL 스트리핑에 대한 매우 우수한 보호 기능인 HSTS를 활성화 합니다.

HTTPS가 " https://example.com/yourapp " 의 앱을 MITM 공격 으로부터 보호하더라도 누군가가 클라이언트와 서버 사이에 침입하면 " http://example.com/yourapp " 을 쉽게 방문하도록 유도 할 수 있습니다. . 위의 보호 기능 중 어느 것도 사용하지 않으면 브라우저는 MITM을 수행하는 사람에게 세션 쿠키를 기꺼이 보냅니다.


설정 config.force_ssl에는 ActionDispatch::SSL. ActionDispatch::SSL(강조는 명확성을 위해 추가 된) 다음 문서는 기능을 설명 :

여기 에 포함 된 내용여기 에서 ActionDispatch :: SSL에 대한 문서를 참조 하십시오 .

문서

이 미들웨어는에서 스택에 추가되고에 config.force_ssl = true설정된 옵션을 전달합니다 config.ssl_options. 보안 HTTP 요청을 시행하기 위해 세 가지 작업을 수행합니다.

  1. TLS 리디렉션 : 동일한 URL 호스트, 경로 등을 사용하여 http : // 요청을 https : //영구적으로 리디렉션 합니다. 기본적으로 활성화됩니다. config.ssl_options도착 URL (예 :) 을 수정하도록 redirect: { host: "secure.widgets.com", port: 8080 }설정 redirect: false하거나이 기능을 사용하지 않도록 설정 합니다.

  2. 보안 쿠키 : 쿠키 secure플래그를 설정하여 브라우저에 http : // 요청과 함께 전송해서는 안됩니다. 기본적으로 활성화됩니다. 설정 config.ssl_options으로하면 secure_cookies: false이 기능을 비활성화합니다.

  3. HSTS (HTTP Strict Transport Security) : 이 사이트를 TLS 전용으로 기억하고 비 TLS 요청을 자동으로 리디렉션하도록 브라우저에 지시합니다 . 기본적으로 활성화됩니다. 구성 config.ssl_optionshsts: false사용하지 않으려면. 설정 config.ssl_optionshsts: { … }구성 HSTS에 :

    • expires:이 설정이 유지되는 시간 (초)입니다. 기본값은 180.days(권장)입니다. 브라우저 사전로드 목록을 받기 위해 필요한 최소값은 18.weeks입니다.
    • subdomains: true이 설정을 모든 하위 도메인에 적용하도록 브라우저에 지시하려면로 설정합니다. 이렇게하면 하위 도메인의 취약한 사이트가 쿠키를 가로채는 것을 방지 할 수 있습니다. 기본값은 true.
    • preload:이 사이트가 브라우저의 사전로드 된 HSTS 목록에 포함될 수 있다고 광고합니다. HSTS 는 아직 HSTS 헤더를 보지 못했기 때문에 방문을 제외한 모든 방문에서 사이트를 보호합니다 . 이러한 격차를 줄이기 위해 브라우저 공급 업체는 HSTS 지원 사이트의 기본 목록을 포함합니다. 포함 할 사이트를 제출 하려면 https://hstspreload.appspot.com 으로 이동 하십시오 . HSTS를 끄려면 헤더를 생략하는 것만으로는 충분하지 않습니다. 브라우저는 만료 될 때까지 원래 HSTS 지시문을 기억합니다. 대신 헤더를 사용하여 브라우저에 HSTS를 즉시 만료하도록 지시하십시오. 설정 hsts: false은에 대한 바로 가기입니다 hsts: { expires: 0 }.

요청은 다음을 사용하여 리디렉션을 거부 할 수 있습니다 exclude.

config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }

이 설정은 HTTP 요청을 HTTPS 대응으로 리디렉션하여 HTTPS를 강제합니다. 따라서 방문하는 브라우저 http://domain.com/path는로 리디렉션됩니다 https://domain.com/path.

설정을 주석 처리 한 상태로두면 두 프로토콜이 모두 허용됩니다.

HTTPS 요청을 처리하려면 웹 서버를 구성해야합니다.


서버와의 모든 통신을 암호화하고 SSL을 사용합니다 (예 : HTTPS를 통해).

컨트롤러에 포함 시키면 해당 컨트롤러는 HTTPS 요청 만 수락합니다.

유용한 링크 :

  1. http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
  2. http://rubydoc.info/docs/rails/ActionController/ForceSSL
  3. http://railscasts.com/episodes/270-authentication-in-rails-3-1?view=comments

참고 URL : https://stackoverflow.com/questions/15676596/what-does-force-ssl-do-in-rails

반응형