Как я могу запретить доступ по определенному IP в Rails? - PullRequest
1 голос
/ 24 ноября 2010

Я хотел бы отключить людей, которые запускают скребки экрана на нашем сайте и анализируют данные.Или, по крайней мере, сильно их замедлить.

Моя идея состоит в том, чтобы записать каждый IP-адрес в объект памяти и подсчитать, сколько запросов они делают в минуту, а затем поместить их в какой-либо список «нет доступа», если они превышаюткакое-то число, которое я установил.

Я просто ищу подтверждение сообществом того, является ли это разумным подходом для приложения Rails.Спасибо за любую помощь, которую вы можете предложить.

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Я не уверен, что это хорошая идея - защитить ваш сайт от этих IP-адресов на уровне приложений.Я бы лично проверил, возможно ли это сделать на сетевом уровне, например, в вашем брандмауэре / маршрутизаторе.Если у вас есть маршрутизатор Cisco, проверьте команду «rate-limit».

0 голосов
/ 29 ноября 2010

Я не знаю, ребята, я нашел довольно хороший способ сделать это в приложении.В любом случае, я просто хочу наказать за плохое поведение в одном приложении.То, что я закончил, было:

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

Я уверен, что смогу усилить это, чтобы я не делал удар по дб каждый раз, но, похоже, он работает довольно хорошоЭто поймал GoogleBot прошлой ночью.Кроме того, существует возможность внесения в белый список IP-адресов в случае, если группа людей входит через известный прокси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...