2010-02-02 5 views
2

우리 팀은 Ruby on Rails를 사용하여 웹 응용 프로그램을 만들었습니다. 현재 사용자가 과도한 로그인 요청을하지 않도록 제한하지 않습니다. 자동화 된 로봇을 방어하기 위해 주로 실패를 여러 차례 시도한 후에 잠시 동안 사용자의 로그인 요청을 무시하고 싶습니다.과도한 로그인 요청을 방어하는 방법은 무엇입니까?

여기 내 질문은 :

  1. 어떻게 우리의 웹 사이트에 과도한 요청을 할 수있는 프로그램 또는 스크립트를 작성? 웹 응용 프로그램을 테스트하는 데 도움이되기 때문에 필요합니다.

  2. 일정 기간 내에 로그인 시도가 실패한 사용자를 제한하는 방법은 무엇입니까? Ruby on Rails에는 요청자를 식별하고 최근 요청을했는지 여부를 추적 할 수있는 내장 솔루션이 있습니까? 그렇지 않다면 요청자 (Ruby on Rails에만 국한되지 않음)를 식별하고 요청자의 활동을 추적하는 일반적인 방법이 있습니까? IP 주소 나 쿠키 또는 컴퓨터에서 수집 할 수있는 기타 정보로 사용자를 식별 할 수 있습니까? 또한 자주 사용하지 않는 요청을하는 일반 사용자와 자주 사용하는 자동 로봇을 구별 할 수 있기를 바랍니다.

고마워요!

답변

1

# 1과 관련하여 주어진 URL에 대용량 게시를 시뮬레이트 할 수있는 많은 자동화 도구가 있습니다. 플랫폼에 따라 wget만큼 간단 할 수도 있습니다. 또는 복잡한 (상대적으로 말하자면) UserAgent에게 주어진 요청을 여러 번 게시하도록 요청하는 스크립트입니다 (다시 말하면, 플랫폼에 따라 이것은 간단 할 수 있으며, 또한 작업 1의 언어에 따라 다릅니다).

# 2와 관련하여 먼저 수동으로 여러 번 시도하는 사람의 작은 문제를 고려하십시오. 이러한 인스턴스는 보통 세션 (실제 웹 서버 세션)을 공유합니다. 이 세션 ID를 기반으로 실패한 로그인을 추적 할 수 있어야합니다. 실패한 시도의 볼륨이 일부 임계 값을 초과하는 경우 초기 실패를 강제합니다. 나는 특별히 이것을하는 어떤 플러그인이나 보석도 모른다. 그러나 그것이 없더라도, 솔루션을 만드는 것은 충분히 간단해야한다.

세션 ID가 작동하지 않는 경우 IP와 UserAgent를 함께 사용하면 프록시를 사용하는 개인이 불만족 스러울 수 있습니다 (문제인지 여부는 크게 좌우됩니다). 귀하의 비즈니스 요구 사항에 따라).

공격자가 악의적 인 사람인 경우 방화벽 규칙을 사용하여 액세스를 차단해야합니다. 즉, a) 프록시 사용 (IP 순환이 발생 함), b) 프로빙 중에 쿠키 사용 안 함 , 그리고 c) UserAgent 문자열로 훌륭하게 재생되지 않습니다.

+0

나는 브라우저에만 UserAgent가 고정되어 있다고 생각했습니다. 해커가 자동화 된 도구를 사용하면 해커는 UserAgent를 숨기거나 마음대로 변경할 수 있습니다. 내가 맞습니까? – Shuo

+0

예; 그렇기 때문에 특정 상황이 중요합니다. 해커로부터 보호하려면 자동화 된 방화벽 및 서버 보안 규칙이 필요합니다. 노력하고있는 사용자에 대한 보호 기능을 제공한다면 내가 게시 한 것이 작동해야합니다. – macabail

1

RoR은 A Guide to Testing Rails Applications에 설명 된대로 응용 프로그램을 테스트하기위한 수단을 제공합니다. 간단한 해결책은 10 (또는 과도하게 정의한 값) 로그인 요청을 보내는 루프를 포함하는 테스트를 작성하는 것입니다. 프레임 워크는 HTTP 요청을 보내거나 가짜로 전송하는 수단을 제공합니다.

로그인 시스템을 남용하지 않는 사람이 많기 때문에 로그인 실패의 IP 주소를 기억하는 것만으로는 충분합니다. 저장할 많은 데이터. 일부 해커가 엄청난 양의 IP 주소에 액세스 할 수 없다면 ...하지만 그런 상황에서는 좀 더/심각한 보안 측정이 필요합니다.

+0

NAT를 사용하는 일부 사용자는 실제로 동일한 IP를 공유 할 수 있습니까? 사용자 식별을 위해 IP를 사용하면 차단됩니까? – Shuo

+0

예, IP를 공유하기 때문입니다. 하지만, 그 사람들은 (귀하의 로그인을 악용하는 동안) 대부분 홈 네트워크에있을 것이고 그 네트워크에 속한 모든 컴퓨터는 그들 소유의 것입니다. 또한 특정 기간 동안 실패한 로그인을 기억해도 영구적으로 차단하지는 않습니다 (동일한 IP를 사용하는 다른 사용자). 고마워요 할리, – Veger

2

내가 본 한 가지 트릭은 CSS 양식을 통해 사용자가 볼 수 없도록하는 로그인 양식에 양식 필드를 포함시키는 것입니다.

자동 시스템/로봇은 계속이 필드를보고 데이터로 채울 수 있습니다. 해당 필드에 데이터가 표시되면 적법한 사용자가 아닌 것을 즉시 알게되고 요청을 무시합니다.

이것은 완벽한 보안 솔루션은 아니지만 무기고에 추가 할 수있는 트릭입니다.

+0

. 이것은 재미있는 것 같습니다! – Shuo

관련 문제