ruby におけるセッション固定のトピックのほとんどは、主に Rails に関連しています。sinatra にセッション固定の脆弱性はありますか? Rails では、セッションを割り当てる前に reset_session を実行することをお勧めします。sinatra でセッション固定を防ぐにはどうすればよいですか?
1 に答える
Sinatra はデフォルトで、多くの一般的な脆弱性から保護する Rack::Protection gem を使用します。そのセッション ハイジャック保護に特に関心があるかもしれません。以下は、Rack::Protection gem が保護するものの一部です。
クロスサイト リクエスト フォージェリ
認証トークン:特定のアクセス トークンがセッションに含まれるトークンと一致する場合にのみ、安全でない HTTP 要求を受け入れます。フォーム トークン:指定されたアクセス トークンがセッションに含まれるトークンと一致する場合にのみ、送信されたフォームを受け入れます。Ajax リクエストからそのようなトークンを期待しません。リモート トークン:特定のアクセス トークンがセッションに含まれるトークンと一致する場合、または要求が同じオリジンからのものである場合にのみ、安全でない HTTP 要求を受け入れます。JSON CSRF: JSON GET API は、データを追跡するために Array プロトタイプにパッチが適用されている間、JavaScript として埋め込まれていることに対して脆弱です。コンテンツ タイプが JSON の場合、GET 要求でもリファラーをチェックします。リモート リファラー:Referer [sic] ヘッダーが別のホストに設定されている場合、安全でない HTTP リクエストを受け入れません。
クロスサイトスクリプティング
XSS ヘッダー: X-XSS-Protection ヘッダーを設定して、ブラウザーに攻撃をブロックするように指示します。クリックジャッキング。Escaped Params: Rack::Request#params を自動的にエスケープするため、問題なく HTML や JavaScript に埋め込むことができます。Rails での二重エスケープを回避するために、エスケープされた文字列が定義されている場合は html_safe を呼び出します。
クリックジャッキング
フレーム オプション: X-Frame-Options ヘッダーを設定して、ページをフレームに埋め込まないようにブラウザに指示します。
ディレクトリトラバーサル
「/」と「.」のエスケープを解除し、path_info を展開します。したがって、GET /foo/%2e%2e%2fbar は GET /bar になります。
セッションハイジャック
セッション内のユーザー エージェントなどのリクエスト プロパティを追跡し、それらのプロパティが変更された場合はセッションを空にします。これにより、本質的に Firesheep からの攻撃が防止されます。考慮されるすべてのヘッダーもスプーフィングされる可能性があるため、これによってすべてのハイジャックの試みが防止されるわけではありません。
IP スプーフィング
(一部の) IP スプーフィング攻撃を検出します。
ほとんどのセキュリティ関連の質問と同様に、Web セキュリティの一般的な知識を持っていることをお勧めします。残念ながら、Sinatra のセキュリティに特化した優れたチュートリアルはあまりありません。