6

https://github.com/kickstarter/rack-attackを使用して、悪用者やブルート フォース攻撃者を抑制することに興味があります。私のアプリは複数の dyno で実行されます。したがって、Rails のデフォルトの FileStore は、各 dyno にファイルシステムがあり、スロットリングは両方の集約である必要があるため、十分に効果的ではないと思います。

に memcached プラグイン サービスを使用するRails.cache場合、memcached サービスがダウンした場合 (つまり、FileStore など) に "フォールバック" が Rails に組み込まれていますか?

そうでない場合、memcached サービスが停止すると、Rails アプリがクラッシュするか、ユーザーがアクセスできなくなりますか (エラーを適切に処理する場合と比較して)。

4

1 に答える 1

13

私はラックアタックの作者です。

tl;dr: キャッシング バックエンド (memcached または redis) がダウンしている場合、すべてのリクエストが許可されます (つまり、フェール オープン)。

それは、Rails キャッシュが何をするかに大きく依存します。Dalli memcached クライアント ( ActiveSupport::Cache::DalliStore ) と Redis クライアント ( ActiveSupport::Cache::RedisStore ) の両方が、接続エラーとタイムアウトをレスキューして を返しnilます。

Rack-attack がキャッシュ ストアにスロットル値をクエリすると、キャッシュ ストアは を返しますnil。ラックアタックキャストでto_iをゲット0。また、スロットル制限が > 0 であるため、リクエストは許可されます。

ラック攻撃では、コミット テストごとに統合テストが実行され、エラーが発生せず、memcached/redis が利用できないときに要求が許可されることがテストされます。

于 2015-02-02T18:14:10.980 に答える