2010-11-23 10 views
1

私は、私たちのサイトに対してスクリーンスクレイパーを実行しているユーザーをシャットダウンし、データをマイニングしたいと考えています。または少なくとも大きな時間を遅らせる。Railsで特定のIPによるアクセスを禁止するにはどうすればよいですか?

私の考えは、すべてのIPアドレスをメモリオブジェクトに書き込んで、1分あたりのリクエスト数を数え、設定した数を超えた場合は「アクセス不可」リストに入れておくことです。

これは、Railsアプリケーションのための健全なアプローチであるかどうかについて、コミュニティ検証を探しています。あなたが提供できるお手伝いをありがとう。

答えて

0

私は人を知らない、私はアプリでこれを行うにはかなり良い方法を考え出した。とにかく1つのアプリで悪い行為を処罰したいだけです。私がやってしまったことだった。

def log_ip 
    # Initialize 
    if IPLOG.include?(request.ip) 
    IPLOG[request.ip][:count]+=1 
    else 
    IPLOG[request.ip] = {:time => Time.now, :count => 1} 
    end 
    # Reset the time if necessary 
    IPLOG[request.ip][:time] = Time.now if IPLOG[request.ip][:time] < 1.minute.ago 
    if IPLOG[request.ip][:count] > REQUESTS_PER_MINUTE_UNTIL_BLACKLIST 
    Blacklist.create(:ip_address => request.ip, :count => IPLOG[request.ip][:count]) 
    end 
    if Blacklist.where(:ip_address => request.ip).first 
    IPLOG.delete(request.ip) 
    redirect_to blocked_path 
    end 
end 

私はので、私はDBは毎回ヒットやっていないよ、これを引き締めることができると確信していますが、それはかなりうまく機能しているように見えます。昨夜、GoogleBotを捕まえました。さらに、既知のプロキシを介して多数の人が入ってくる場合に、IPアドレスをホワイトリストに登録する機会があります。

3

アプリケーションレベルでこれらのIPからサイトを保護することをお勧めします。あなたのファイアウォールやルータなど、ネットワークレベルでそれが可能かどうか私は個人的に調査します。シスコルータをお持ちの場合は、「レート制限」コマンドをチェックしてください。

+0

+1ユーザーをブロックするためにアプリケーションの変更ではなく、ネットワーク設定または少なくともウェブサーバーの設定(nginx/apache)を使用してください。私はWebサーバーの設定は、完全なブロックのようなものを許可するだろうと思うので、ネットワークの設定を行ってください。 – Jeremy

関連する問題