2009-07-09 2 views
1

나는 회사에 대한 문의 양식을 만들고 있으므로 가능한 한 스팸 방지로 만들고 싶습니다. 나는 honey pot + session checking을 만들었지 만, 매 x 분마다 한 번만 폼을 제출할 수 있도록 만들고 싶다. 즉, IP를 x 시간 동안 양식 사용을 금지합니다.일시적으로 IP를 금지하는 PHP

이 작업을 수행하는 가장 좋은 해결책은 무엇입니까?

나는 약간을 생각할 수 있지만 그 중 어느 것도 이상적인 것 같지 않습니다.

답변

5

양식이 제출 될 때마다 사용자 IP를 시간 소인과 함 2 저장하십시오. 사용자가 양식을 제출하면 먼저 데이터베이스를 확인하여 해당 기간 내에 제출했는지 확인하십시오.

사용자가 동일한 IP를 사용할 수있는 대규모 네트워크에서 일부 문제가 발생할 수 있습니다. 정말 대상 고객에 따라 다릅니다.

2

데이터베이스. 거기에 IP를 저장하고 타임 스탬프를 작성하십시오.

0

일부 블로그에서 사용되는 멋진 접근 방식은 봇을 보호하기 위해 JavaScript를 사용하는 것입니다. onsubmit() 이벤트에서와 마찬가지로 양식의 메소드를 GET에서 POST로 변경하십시오. 당신은 다른 마술도 할 수 있습니다. 봇은 JavaScript를 실행하는 데 아주 적합하므로 유용하게 사용할 수 있습니다.

다른 한편으로는 - 이로 인해 JavaScript가 활성화되지 않은 사용자의 0.0000001 %가 아플 수 있습니다. 글쎄, 너의 선택. :) 당신은 (내가 가정 봇 일명 일부 "브라우저"를 제거) 쿠키 가능 브라우저에 양식을 제한 괜찮다면

+1

그 사람들을 조종 해 좋은 팁. – zuk1

+0

여기서 0.0000001 % = 6 % http://www.thecounter.com/stats/2009/July/javas.php –

+0

내 사이트의 장바구니는 JS가없는 사람도 일하지 않으므로 누가 신경 써야합니까. – zuk1

0

것은,이 같은 것을 할 수있는 :

양식 페이지가로드, 그것은으로 확인 타임 스탬프가있는 세션 변수 아무 것도 발견되지 않으면 하나를 생성하고 동일한 페이지로 리다이렉트하지만 "action = start"또는 뭔가를 지정하는 GET 매개 변수를 사용합니다. 따라서 두 번째로드에서 $ _GET [ 'action'] == 'start'가 표시되면 해당 세션 변수를 확인할 수 있습니다. 쿠키를 찾지 못하면 쿠키가 필요하다는 다른 곳으로 리디렉션 할 수 있습니다.

이제 타임 스탬프를 확인하고 너무 빨리 지나친 경우 다른 작업을 수행 할 수 있습니다.

이 방법을 사용하면 방화벽 뒤에있는 많은 수의 사람들을 상대 할 때 전체 그룹을 차단할 필요가 없기 때문에 최소한 동일한 IP를 허용합니다.

0

데이터베이스를 사용하면 아무 것도 허용 할 필요가 없으므로 데이터를 기록하기 때문에 최선의 방법 일 수 있습니다. 유일한 문제는 IP를 마스킹하거나 여러 곳에서 공격 할 수 있다는 것입니다. 나는 그들의 세션/쿠키에서 데이터베이스와의 상호 참조를 시도 할 것이다. 같은 사람이 똑같은 IP 주소에서 정말 빨리 귀하의 사이트를 때리는 것은 분명하지만, 당신은뿐만 아니라 사용자가 그들이 빠르게 IP 주소를 전환하는지 볼 수 있습니다 ID를 만듭니다.

0

어떤 종류의 cron 스크립트 (또는 적어도 작성된 도구와 대기중인 도구)를 통해 처리 할 수있는 엉망을 정리할 준비가되어 있어도 괜찮습니다. 내 사이트의 경우 매우 작은 시간대 (10 초 이내) 내에 여러 개의 ips에서 정확하게 동일한 제출물을 플래그로 표시하고 있습니다.

최소한 질문 양식을 제출하여 질문 양식을 제출할 수 있습니다.

관련 문제