2013-08-04 7 views
12

私の構成コードシナトラ/ 1.4.3用ラック::セッション::クッキー警告

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が既に設定されていても、なぜ警告が表示されるのですか?

答えて

34

また、あなたのアプリにセッションを追加しますので、あなたがあなたのミドルウェア・スタック内のRack::Session::Cookieののインスタンスで終わるmakes Sinatra setup cookie based sessions、および

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

両方

enable :sessions 

を使用しています。

この警告は、Sinatraに含まれるセッションミドルウェアによって生成されています。デフォルトではSinatra doesn’t create a session secret when running in the development environment(少なくとも古典的なモードではモジュラーアプリケーション用です)、Rackは開発中に警告を生成します。

セッションを有効にする2つの方法のうちの1つのみが必要です。2つを併用すると、予期しない方法で対話する可能性があります。警告を回避するには

は、明示的にsession_secretオプションを使用してシナトラセッションのための秘密を設定することができます。

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

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

set :sessions, key: 'N&wedhSDF', 
    domain: "localhost", 
    path: '/', 
    expire_after: 14400, 
    secret: '*&(^B234' 
+0

「session_secret」の設定について説明できますか?私は答えを探していましたが、どこにも見つけられません。私の最高の推測は、人々がクッキーを捏造することができないようにハッシュのための塩としてそれを使用するということです。 – Piccolo

+0

@Piccoloはい、人々を偽造するのを防ぐためですが、塩ではなく[HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code)のキーとして使用されます。詳細については、[Rack cookie session code](https://github.com/rack/rack/blob/1.6.4/lib/rack/session/cookie.rb)を参照してください。 – matt

+0

ありがとう!私は今それを調べている。また、アプリケーションの開始時に新しい秘密鍵を生成できない理由はありますか? – Piccolo