복붙노트

[REDIS] 어떻게하면 (즉,이 Sidekiq에 대한 인증을 필요로 :: 웹 도구) 내 / sidekiq 경로를 암호로 보호 할 수 있습니까?

REDIS

어떻게하면 (즉,이 Sidekiq에 대한 인증을 필요로 :: 웹 도구) 내 / sidekiq 경로를 암호로 보호 할 수 있습니까?

내 레일 응용 프로그램에서 sidekiq을 사용하고 있습니다. 기본적으로 Sidekiq는 URL 후 "/ sidekiq"를 추가하여 누구나 액세스 할 수 있습니다. 나는 암호 보호 / 인증합니다에만 sidekiq 부분에합니다. 내가 어떻게 할 수 있습니까?

해결법

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

    1.당신의 sidekiq 초기화에 다음을 넣어

    당신의 sidekiq 초기화에 다음을 넣어

    require 'sidekiq'
    require 'sidekiq/web'
    
    Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|
      [user, password] == ["sidekiqadmin", "yourpassword"]
    end
    

    그리고 루트 파일 :

    authenticate :user do
      mount Sidekiq::Web => '/sidekiq'
    end
    
  2. ==============================

    2.https://github.com/mperham/sidekiq/wiki/Monitoring에서 "보안"을 참조하십시오

    https://github.com/mperham/sidekiq/wiki/Monitoring에서 "보안"을 참조하십시오

  3. ==============================

    3.죄송 파티에 늦었지만 Sidekiq의 위키로 유증에 대해 다음을 권장합니다 :

    죄송 파티에 늦었지만 Sidekiq의 위키로 유증에 대해 다음을 권장합니다 :

    인증 된 사용자를 허용하려면 :

    # config/routes.rb
    authenticate :user do
      mount Sidekiq::Web => '/sidekiq'
    end
    

    User.admin에 대한 액세스를 제한하려면?

    # config/routes.rb
    authenticate :user, lambda { |u| u.admin? } do
      mount Sidekiq::Web => '/sidekiq'
    end
    

    이 위키 포스트는 또한 많은 다른 보안 체계를 가지고있다.

    이 레일 5.1.3 고안 4.3 Sidekiq 5.0를 사용하여 테스트했다

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

    4.당신이 고안 (또는 다른 소장 기반 인증)를 사용하는 경우, 당신은 당신이 당신의 응용 프로그램의 관리 사용자 모델을 가정하여,이 작업을 수행 할 수 있습니다.

    당신이 고안 (또는 다른 소장 기반 인증)를 사용하는 경우, 당신은 당신이 당신의 응용 프로그램의 관리 사용자 모델을 가정하여,이 작업을 수행 할 수 있습니다.

    # config/routes.rb
    # This defines the authentication constraint
    constraint = lambda do |request|
                   request.env['warden'].authenticate!({ scope: :admin_user })
                 end
    
    # This mounts the route using the constraint.
    # You could use any other path to make it less obvious
    constraints constraint do
      mount Sidekiq::Web => '/sidekiq'
    end
    
  5. ==============================

    5.당신이 당신의 자신의 사용자 지정 인증을 압연하는 경우, 당신은 여기에 문서에서 참조하는 아래의 예제를 사용할 수 있습니다.

    당신이 당신의 자신의 사용자 지정 인증을 압연하는 경우, 당신은 여기에 문서에서 참조하는 아래의 예제를 사용할 수 있습니다.

    # lib/admin_constraint.rb
    class AdminConstraint
      def matches?(request)
        return false unless request.session[:user_id]
        user = User.find request.session[:user_id]
        user && user.admin?
      end
    end
    
    # config/routes.rb
    require 'sidekiq/web'
    require 'admin_constraint'
    mount Sidekiq::Web => '/sidekiq', :constraints => AdminConstraint.new
    
  6. ==============================

    6.또 다른 옵션은 캉캉과 역할에 따라 특별 액세스 뭔가를 추가하는 것입니다.

    또 다른 옵션은 캉캉과 역할에 따라 특별 액세스 뭔가를 추가하는 것입니다.

  7. ==============================

    7.당신이 인증을 위해 마법을 사용하는 경우, 여기에 특정 경로를 보호하기 위해 레일 경로 제약 조건을 사용하는 방법은 다음과 같습니다.

    당신이 인증을 위해 마법을 사용하는 경우, 여기에 특정 경로를 보호하기 위해 레일 경로 제약 조건을 사용하는 방법은 다음과 같습니다.

    중복의 마법 위키에서 여기에 복사 :

    이 튜토리얼을 보여줍니다 사용 방법은 마법 보석으로 경로 제약 레일. 를 작성하기위한 @anthonator에 감사합니다!

    첫째, 모든 제약 조건에 사용됩니다 UserConstraint 모듈을 정의한다 :

    module RouteConstraints::UserConstraint
      def current_user(request)
        User.find_by_id(request.session[:user_id])
      end
    end
    

    그런 다음, 해당 모듈 정의를 갖는, 특정 제약 클래스를 지정할 수 있습니다. 이 예에서, 첫 번째 경로는 로그인 한 사용자가 존재하지 않는 경우에만, 두 번째는 관리자입니다 기록 된 사용자에 대해 작동합니다 작동합니다 :

    class RouteConstraints::NoUserRequiredConstraint
      include RouteConstraints::UserConstraint
    
      def matches?(request)
        !current_user(request).present?
      end
    end
    
    class RouteConstraints::AdminRequiredConstraint
      include RouteConstraints::UserConstraint
    
      def matches?(request)
        user = current_user(request)
        user.present? && user.is_admin?
      end
    end
    

    마지막으로, 당신은 설정 / routes.rb에 제약 조건을 추가 할 수 있습니다 :

    MyApp::Application.routes.draw do
    
      # other routes …
    
      root :to => 'admin#dashboard', :constraints => RouteConstraints::AdminRequiredConstraint.new
      root :to => 'home#welcome', :constraints => RouteConstraints::NoUserRequiredConstraint.new
    
    end
    
  8. ==============================

    8.허용 대답은 좋다,하지만 난 Sidekiq 문서는 언급으로는,보다 안전하게 구현 될 수 있다고 생각합니다.

    허용 대답은 좋다,하지만 난 Sidekiq 문서는 언급으로는,보다 안전하게 구현 될 수 있다고 생각합니다.

    타이밍 공격에 대한 귀하의 응용 프로그램을 보호하기 위해, ActiveSupport :: SecurityUtils.secure_compare를 사용합니다.

    또한, 사용 및 (사용하지 않는 &&) 그래서 단락을하지 않는 것이.

    그리고 마지막으로, 사용 다이제스트가 누출 길이 정보 (활동 지원 5 secure_compare의 기본값)를 중지합니다.

    활동 지원 5 : 감사 레일 PR # 24510로는 secure_compare에 전달 된 매개 변수는 기본적으로 다이제스트 :: SHA256.hexdigest을 통해 갈 수 있습니다.

    require 'active_support/security_utils'
    require 'sidekiq'
    require 'sidekiq/web'
    
    Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|
      # Protect against timing attacks:
      # - See https://codahale.com/a-lesson-in-timing-attacks/
      # - See https://thisdata.com/blog/timing-attacks-against-string-comparison/
      # - Use & (do not use &&) so that it doesn't short circuit.
      # - Use digests to stop length information leaking
      ActiveSupport::SecurityUtils.secure_compare(user, ENV["SIDEKIQ_ADMIN_USER"]) &
        ActiveSupport::SecurityUtils.secure_compare(password, ENV["SIDEKIQ_ADMIN_PASSWORD"])
    end
    

    활동 지원 4 :

    require 'active_support/security_utils'
    require 'sidekiq'
    require 'sidekiq/web'
    
    Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|
      # Protect against timing attacks:
      # - See https://codahale.com/a-lesson-in-timing-attacks/
      # - See https://thisdata.com/blog/timing-attacks-against-string-comparison/
      # - Use & (do not use &&) so that it doesn't short circuit.
      # - Use digests to stop length information leaking
      ActiveSupport::SecurityUtils.secure_compare(
        ::Digest::SHA256.hexdigest(user),
        ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_ADMIN_USER"])
      ) &
        ActiveSupport::SecurityUtils.secure_compare(
          ::Digest::SHA256.hexdigest(password),
          ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_ADMIN_PASSWORD"])
        )
    end
    
  9. from https://stackoverflow.com/questions/12265421/how-can-i-password-protect-my-sidekiq-route-i-e-require-authentication-for-th by cc-by-sa and MIT license