悪用を避けるために、RailsアプリケーションのRESTAPIにレート制限を追加したいと思います。これについて少し調査した後、ベストプラクティスは、アプリケーション自体でこれをチェックするのではなく、この責任をWebサーバーに移すことであるように見えます。残念ながら、私の場合、Herokuでアプリケーションをホストしているため、これを行うことはできません。そのため、Webサーバーのセットアップを制御できません。
この場合、APIの乱用を防ぐために何をすべきですか?
悪用を避けるために、RailsアプリケーションのRESTAPIにレート制限を追加したいと思います。これについて少し調査した後、ベストプラクティスは、アプリケーション自体でこれをチェックするのではなく、この責任をWebサーバーに移すことであるように見えます。残念ながら、私の場合、Herokuでアプリケーションをホストしているため、これを行うことはできません。そのため、Webサーバーのセットアップを制御できません。
この場合、APIの乱用を防ぐために何をすべきですか?
rack-throttle
あなたが探しているのはorgemだと思いますrack-attack
。どちらもスロットルを許可し、rack-attack
gemを使用すると、一定期間タイムアウトし、複数回の違反者である場合やその他の理由でリクエスターをブロックしたい場合は、特定のIPアドレスをブロックできます。
クライアントにCookieを配置することを検討してください。さらに良いのは、最後にリクエストを行った時間を記録するユーザーアカウントのフィールドであり(多くの認証プラグインはすでにこれを行っています)、リクエストが最近のものである場合は、単に拒否/遅延します。 、5秒前(20リクエスト/秒)。
注:シングルスレッドのウェブサーバー(Mongrelなど)を使用している場合、拒否ではなく明示的な遅延を設定すると、そのMongrelで保留中の他のリクエストが遅延する可能性があります。言い換えれば、それはあなたの他のユーザーに影響を与えるでしょう。おそらく、適切な場合は、レート制限されていることをユーザーに通知するための小さなjavascript/ajax応答です。StackOverflowが、サイトで特定のことを頻繁に行わないようにする方法を考えてみてください。