2010-05-08 5 views
2

레지스트리의 일종 인 응용 프로그램을 구축하고 있습니다. 사전에 대해 생각해보십시오 : 단어를 찾아보고 단어가 있으면 뭔가를 반환합니다. 이제이 레지스트리는 회사에 대한 중요한 정보를 저장하고 일부는 전체 목록을 얻으려는 유혹을받을 수 있습니다. 내 응용 프로그램은 WS에 응답하는 EJB 3.0을 사용합니다.봇이 데이터베이스에 여러 번 쿼리하지 못하도록하십시오.

그래서 하루에 IP 주소 당 최대 10 개의 쿼리를 허용한다고 생각했습니다. 매일 밤 스크립트로 비어있는 테이블에 IP 주소와 카운터 저장.

이렇게하는 것이 좋습니다. 그렇다면 어떻게하면 EJB 측에서 IP 주소를 얻을 수 있습니까? 데이터베이스에서 모든 데이터를 가져 오는 것을 막는 더 좋은 방법이 있습니까? 나는 CAPTCHA에 대해서도 생각해 봤지만 사용자에게는 고통스런 것이라고 생각합니다. 언젠가는 실제 인간이라도 읽기가 어렵습니다.

내가 IP 당 하루에 10 쿼리의 제한이 매우 좋지 않다라고 말하고 싶지만 ... 나는 영어 아니에요 이후 모든 분명

감사 알랭

+0

웹 서비스 또는 웹 사이트에 인증이 필요합니까? 누구든지 계정을 등록하고 만들 수 있습니까? 아니면 어떤 종류의 승인이 필요합니까? 액세스 문제를 해결하면 봇을 막을 수 있습니다. 귀하의 사이트가 개방형 환경이라면, 불가능한 것이 아니라 어렵게 만 만들 수 있습니다. –

+0

관심을 가져 주셔서 감사합니다. 예, 내 웹 사이트는 공개되어 공개해야합니다. 그러나 더 많은 서비스를 얻기 위해 계정을 만들 수도 있습니다. 계정을 만들려면 시스템에서 전자 메일 확인을 수행합니다 (제공된 전자 메일 주소로 전자 메일을 보내 전자 메일 주소가 올바른지 확인합니다). 그리고 나는 또한 그 계정 생성에 대한 보안 문자를 가지고있다. 보안 문자에 대해 말하면 내 사이트가 공개되어야하므로 보안 솔루션이 유일할까요? 아니면 봇이 이제 CAPTCHA를 읽을만큼 좋습니다. – Alain

답변

1

를 바랍니다. 많은 사람들이 동일한 공개 IP를 공유 할 수 있다는 점을 고려하십시오.

비록 100 % 정확하지는 않지만 짧은 시간에 동일한 IP에서 비정상적인 요청이 오는지 분석 할 수 있습니다. 알람 소리가 들리면 보안 문자가 표시됩니다.

+0

공유 IP 주소의 경우 +1입니다. 말할 것도없이 누군가 IP 주소를 많이 사용하거나 봇을 사용하여 "수집"을 중지하는 것은 거의 불가능합니다. 앱을 신뢰할 수있는 사용자에게만 제한하거나 볼 수있는 것을 제한하십시오. –

1

다른 대안은 세션 범위에 저장하는 양식의 숨겨진 필드에 고유 요청 기반 토큰을 넣은 다음 양식 제출시이를 비교하는 것입니다. 그것은 세션을 유지하지 못하는 봇을 걸러 낼 것이고 그것은 이미 꽤 많이 있습니다.

추가 단계를 진행하려면 요청 기반 토큰에 타임 스탬프를 추가 한 다음 양식이 적절한 시간 내에 제출되었는지 확인하십시오 (예 : 5 초 (적어도 정상적인 인간이 입력하고 양식을 제출할 수있는 가장 빠른 시간). 그것은 보통 순간적으로 폼을 채우고 서브 초 안에 폼을 제출하는 다른 보트를 걸러냅니다. 이것의 또 다른 이점은 매우 스마트 봇의 경우 이후의 요청을 많이 내 보내면 더 쉽게 받아 들일 수 있다는 것입니다.

나는 적어도 IP 주소에 의지하지 않을 것이다. 너무 많은 외란 요인이 있습니다.

+0

하지만 그는 타겟 공격을 막기를 원합니다.이 경우 "수집가"는 아마도 이러한 대책을 우회 할 수 있습니다. –

+0

@ Longpoke : 그걸 알아내는 것은 쉽지 않을 것입니다. :) 그럼 더 나은 방법을 알고 있습니까? – BalusC

+0

답변 해 주셔서 감사합니다. 그러나 나는 그것을 올바르게 이해하고 있는지 확인하고 싶습니다. 내 양식에 타임 스탬프가있는 양식에 숨겨진 필드를 놓고 세션에 같은 값을 저장합니다. 양식이 제출되면 제출 된 숨겨진 필드의 값을 세션에있는 값과 비교합니다. 그리고 그 값이 5 ~ 10 초보다 적 으면 바로 CAPTCHA를 표시하여 봇을 바로 멈출 수 있습니다. 솔루션을 올바르게 이해했는지 확인해주십시오. 감사합니다. – Alain