2012-10-09 1 views
4

필자는 flask/memcached를 실행 중이며 자동 스크립트가 요청에 따라 슬래 밍하거나 새 게시물을 너무 빨리 제출하지 못하도록하는 능률적 인 방법을 찾고 있습니다.웹 응용 프로그램의 스크립팅 된 남용을 방지하는 Leastest way?

세션 쿠키에 'last_action'시간을 포함시키고 각 요청에 대해 확인했지만 설정 한 시간에 관계없이 스크립트는 그 시간만큼 지연되도록 설정할 수있었습니다.

IP를 잡아서 너무 많은 요청이 시간이 오래 걸리면 너무 오랫동안 거부해야하지만 효율적으로 실행하려면 redis와 같은 것이 필요할 것입니다. 나는 그것을 피하고 싶습니다. 돈을 내야 만합니다.

나는 redis와 같은 것이 가치 있다고 증명할 수없는 한 쿠키 기반 솔루션을 선호합니다.

이러한 상황을 처리하기위한 '업계 표준'은 무엇입니까? 최소한의 비용/성능 절충으로 어떤 방법이 제공됩니까?

답변

4

악의적 인 스크립트가 자동으로 쿠키를 삭제할 수 있기 때문에 쿠키로이를 수행 할 방법이 없습니다. 사용자가 처음 방문하는 경우 (쿠키가 설정되지 않은 것을 의미)를 지원해야하기 때문에 클라이언트에 저장된 상태 만 고려하여 정품 신규 사용자와 악성 스크립트를 구별 할 수있는 방법이 없습니다.

목표를 달성하려면 서버 측에서 사용자를 추적해야합니다. 동일한 IP로 신속하게 게시 할 수 없도록하는 IP 기반 필터만큼이나 간단합니다.

2

앱의 시나리오에서 정확히 "핵심"문제가 무엇인지 그리고 사용자가 될 사용자를 결정해야합니다. 그러면 올바른 솔루션을 안내하는 데 도움이됩니다.

내 경험에

, 거기에이 주제에 다른 문제와 해결의 많은 - 그리고 아무도 당신이 익명 사용자에 문제가있는 경우

  • "하나 개의 크기는 모두 맞는"입니다, 당신은 시도 할 수 있습니다 '계정 월'의 기능을 가능한 한 많이 마이그레이션하십시오.
  • 계정 벽을 사용할 수없는 경우 일부 헤더/자바 스크립트와 함께 IP 기반 추적을 사용하면 더 편리 할 것입니다. IP 만 사용하면 회사 프록시, 홈 라우터 등으로 인해 재앙이 될 수 있습니다. 오 탐지 (false positives)가 너무 많을 위험이 있습니다. 브라우저 정보를 추가하면 부적절한 사용자는 여전히 위장 할 수 있지만 실제 사용자는 적을 수 있습니다.
  • 쿠키를 시행하는 방법으로 만 계정 벽을 사용할 수도 있고, 경험상 권한이있는 사이트 ID를 가져 오는 아이디어에 연결될 수도 있습니다.
  • 신뢰할 수있는 다른 사람과 매핑 할 수있는 계정 사이트의 계정 예를 들어, 나는 일반적으로 Facebook에 대한 제 3 자 계정 바인딩을 신뢰합니다. 누가 가짜 계정을 다루는데 꽤 괜찮은 사람입니까? 트위터에 대한 제 3 자 계정 바인딩을 신뢰하지 않습니다. 이는 대부분 스팸입니다.
  • captcha 또는 가장 부적절한 방문을 제거하는 데 약간 불편한 부분을 해결하려면 사이트 "등록"만 필요할 수 있습니다. 나쁜 행동에 대한 보상이 충분히 높다면 아무 것도 해결할 수 없습니다.

하루 종일 이야기 할 수 있습니다. 저의 관점에서 비즈니스 로직과 ux 개념을 먼저 풀어야합니다. 그런 다음 테크 솔루션이 훨씬 쉽습니다.

0

이전에 사용했던 매우 간단한 방법은 등록 양식에 CSS를 사용하여 숨겨진 추가 입력 (예 : 표시 : 없음)을 추가하는 것입니다. 대부분의 폼 봇은이 필드를 채우지 만 사람은 볼 수 없기 때문에 보이지 않습니다. 서버 측 코드에서 입력이 채워진 모든 POST를 거부 할 수 있습니다.