12

私の設定コード

require 'sinatra'

#set :environment, :production
enable :sessions
enable :logging
set run: true

case
  when production?
    set port: 8081
  when development?
    require 'sinatra/reloader'
    require 'better_errors'
    use BetterErrors::Middleware
    BetterErrors.application_root = __dir__
end

use Rack::Session::Cookie, key: 'N&wedhSDF',
    domain: "localhost",
    path: '/',
    expire_after: 14400,
    secret: '*&(^B234'

get '/' do
  erb :hello
end

それでも警告が表示されます:

SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
This poses a security threat. It is strongly recommended that you
provide a secret to prevent exploits that may be possible from crafted
cookies. This will not be supported in future versions of Rack, and
future versions will even invalidate your existing user cookies.

しかし、それは本番環境には表示されません

問題は、Rack::Session::Cookie が既に設定されているにもかかわらず、なぜ警告が表示されるのかということです。

4

1 に答える 1

36

両方を使用しています

enable :sessions

Sinatra セットアップ Cookie ベースのセッションを作成し、

use Rack::Session::Cookie, ...

また、アプリにセッションを追加するため、ミドルウェア スタックにの2 つのインスタンスができます。Rack::Session::Cookie

警告は、Sinatra に含まれるセッション ミドルウェアによって生成されています。デフォルトでは、Sinatraは開発環境での実行時にセッション シークレットを作成しません(少なくともクラシック モードでは、モジュラー アプリの場合は作成します)。そのため、Rack は開発中に警告を生成します。

セッションを有効にする 2 つの方法のうちの 1 つだけが必要です。2 つを一緒に使用すると、予期しない方法で相互作用する可能性があります。

警告を回避するには、次のsession_secretオプションを使用して Sinatra セッションのシークレットを明示的に設定できます。

enable :sessions
set :session_secret, '*&(^B234'

セッションを有効にするときに、オプション ハッシュを引数として渡すこともできます。の代わりにenable :sessions、次のようにします。

set :sessions, key: 'N&wedhSDF',
  domain: "localhost",
  path: '/',
  expire_after: 14400,
  secret: '*&(^B234'
于 2013-08-04T21:17:30.797 に答える