복붙노트

[RUBY-ON-RAILS] 3 SSL 중단 레일

RUBY-ON-RAILS

3 SSL 중단 레일

나는 레일 3.0.0에 응용 프로그램을 업그레이드하고 있고 SSL을 추가하기위한 표준 방법이 변경된 경우 (나는 확실하지가 데모 용으로 만 있다면 해요하지만 왠지 지금 SSL을 처리 할 수있는 라우터를 나타내는 데모를 기억) 궁금. 나는 현재, 그러나 그것은 준다은 "ssl_requirement"보석을 사용합니다 :

또한, 처리하는 새로운 '데이터 방법은'속성 때 휴식 나타납니다. 예를 들면 :

<%= link_to "Logout", user_path, :method => :delete %>

응용 프로그램의 SSL 섹션에서 액세스 할 때 잘 작동하지만, 나는 파괴 작업은 보안 전송하지 않는 것으로 알고 있지만, 사용자가 컨트롤러의 모든 행동이 SSL을 필요로 (비 SSL 섹션에서 다음 때 (show 액션을 렌더링하는 시도) 실패 데이터).

해결법

  1. ==============================

    1.그것은 참 레일 (3)에서 설정 / routes.rb 꽤 간단합니다 :

    그것은 참 레일 (3)에서 설정 / routes.rb 꽤 간단합니다 :

    MyApplication::Application.routes.draw do
      resources :sessions, :constraints => { :protocol => "https" }
    end
    

    또는 여러 경로에 대한 강제 SSL해야하는 경우 :

    MyApplication::Application.routes.draw do
      scope :constraints => { :protocol => "https" } do 
        # All your SSL routes.
      end
    end
    

    그리고 다음과 같이 수행 할 수 있습니다 SSL 경로에 링크 :

    <%= link_to "Logout", sessions_url(:protocol => 'https'), :method => :delete %>
    

    자동 상응하는 HTTPS 기반 URL 일부 컨트롤러 (또는 실제로, 일부 서브 패스를) 리디렉션하려면, 당신은 (나는이 부분은 간단했다하고자하는) 당신의 경로로 이런 일을 추가 할 수 있습니다 :

    # Redirect /foos and anything starting with /foos/ to https.
    match "foos(/*path)", :to => redirect { |_, request|
      "https://" + request.host_with_port + request.fullpath }
    
  2. ==============================

    2.접근에 정착 최고의 솔루션 I을 찾고 오후를 지출 한 후이 문서에서 설명 : http://clearcove.ca/blog/2010/11/how-to-secure-a-rails-app-on-heroku-with 레일에 2 응용 프로그램을 ssl_requirement를 사용하여 강제 SSL :이 문서를 참조 -ssl-에서 Firesheep /

    접근에 정착 최고의 솔루션 I을 찾고 오후를 지출 한 후이 문서에서 설명 : http://clearcove.ca/blog/2010/11/how-to-secure-a-rails-app-on-heroku-with 레일에 2 응용 프로그램을 ssl_requirement를 사용하여 강제 SSL :이 문서를 참조 -ssl-에서 Firesheep /

    기본적으로이 작업을 수행 :

    # lib/middleware/force_ssl.rb
    class ForceSSL
      def initialize(app)
        @app = app
      end
    
      def call(env)
        if env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https'
          @app.call(env)
        else
          req = Rack::Request.new(env)
          [301, { "Location" => req.url.gsub(/^http:/, "https:") }, []]
        end
      end
    end
    
    # config/application.rb
    config.autoload_paths += %W( #{ config.root }/lib/middleware )
    
    # config/environments/production.rb
    config.middleware.use "ForceSSL"
    
  3. ==============================

    3.Toppic하지만 단지 사람들을 인터넷 검색에 대한 오래된 :

    Toppic하지만 단지 사람들을 인터넷 검색에 대한 오래된 :

    에서 * 응용 프로그램 / 컨트롤러 / your_controller.rb *

     class LostPasswordsController < ApplicationController
    
       force_ssl
    
       def index
         #....
       end
     end 
    

    세계적 경우 것은 응용 프로그램 컨트롤러에서 사용

    http://apidock.com/rails/ActionController/ForceSSL/ClassMethods/force_ssl

    ... 들으 S.L. 팁

  4. ==============================

    4.나중에 레일 (적어도 3.12+) 다음, 특정 환경을 사용할 수 있습니다 :

    나중에 레일 (적어도 3.12+) 다음, 특정 환경을 사용할 수 있습니다 :

    에서 설정 / 환경 / production.rb (또는 다른 환경)

    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
    config.force_ssl = true
    
  5. from https://stackoverflow.com/questions/3634100/rails-3-ssl-deprecation by cc-by-sa and MIT license