문제

답변을 수락했지만 안타깝게도 원래의 최악의 시나리오에 갇혀 있다고 생각합니다. 쓰레기 구매 시도에 대한 모든 사람의 보안 문자.간단한 설명:캐싱/웹 팜으로 인해 조회수를 추적할 수 없으며 모든 해결 방법(캐시되지 않은 웹 비콘 보내기, 통합 테이블에 쓰기 등)으로 인해 봇보다 사이트 속도가 더 느려집니다.높은 수준에서 도움이 될 수 있는 Cisco 등의 값비싼 하드웨어가 있을 수 있지만 모든 사람에게 보안 문자를 보내는 것이 대안이라면 비용을 정당화하기는 어렵습니다.나중에 더 자세한 설명을 시도하고 향후 검색자를 위해 정리할 것입니다(커뮤니티 위키이므로 다른 사람들도 시도해 볼 수 있습니다).

상황

이것은 woot.com의 bag o'craps 판매에 관한 것입니다.저는 디자인을 하고, 제품 설명, 팟캐스트, 블로그 게시물을 작성하고, 포럼을 운영하는 Woot의 자회사인 Woot Workshop의 사장입니다.저는 CSS/HTML로 작업하며 다른 기술에는 거의 익숙하지 않습니다.저는 개발자들과 긴밀히 협력하며 여기에 있는 모든 답변(및 우리가 갖고 있는 다른 많은 아이디어)에 대해 이야기했습니다.

유용성은 내 업무의 큰 부분이며 사이트를 흥미롭고 재미있게 만드는 것이 나머지 부분의 대부분입니다.이것이 아래의 세 가지 목표가 파생되는 곳입니다.CAPTCHA는 유용성을 해치고 봇은 쓰레기 판매에서 재미와 흥분을 훔칩니다.

봇은 Random Crap 판매를 위해 두 번째 화면 스크래핑(및/또는 RSS 스캔)에 우리 첫 페이지를 수십 번 쾅 닫고 있습니다.그들이 그것을 보는 순간 로그인하고 I want One을 클릭하고 양식을 작성하고 쓰레기를 구매하는 프로그램의 두 번째 단계를 트리거합니다.

평가

LC:이 방법을 사용하는 stackoverflow 및 기타 사이트에서는 시도 중인 작업에 필요하기 때문에 거의 항상 인증된(로그인된) 사용자를 처리합니다.

Woot에서는 익명(로그인되지 않은) 사용자가 당사 홈페이지를 볼 수 있습니다.즉, 슬래밍 봇은 인증되지 않을 수 있습니다(그리고 본질적으로 IP 주소를 제외하고는 추적이 불가능합니다).

따라서 우리는 IP 검색으로 돌아왔습니다. 이는 a) 클라우드 네트워킹 및 스팸봇 좀비 시대에 상당히 쓸모가 없으며 b) 하나의 IP 주소에서 오는 기업 수를 고려할 때 너무 많은 무고한 사람을 잡아냅니다(문제는 말할 것도 없습니다). 비정적 IP ISP 및 잠재적인 성능 저하를 추적하려고 시도하는 경우).

아, 그리고 사람들이 우리에게 전화를 하는 것은 최악의 시나리오가 될 것입니다.그들이 당신에게 전화하도록 해줄 수 있나요?

브래드C:Ned Batchelder의 방법은 매우 멋져 보이지만 사이트 네트워크용으로 구축된 봇을 물리칠 수 있도록 매우 견고하게 설계되었습니다.우리의 문제는 봇이 우리 사이트를 무찌르기 위해 특별히 제작되었다는 것입니다.이러한 방법 중 일부는 스크립터가 허니팟을 무시하고 양식 ID 대신 근처 레이블 이름을 화면 긁어내고 자바스크립트 지원 브라우저 컨트롤을 사용하도록 봇을 발전시킬 때까지 짧은 시간 동안 작동할 수 있습니다.

 

다시 LC:"물론 과대 광고는 마케팅 체계의 일부가 아니라면" 예, 확실히 그렇습니다.아이템이 나타났을 때의 놀라움과 아이템을 얻었을 때의 설렘은 실제로 얻게 되는 쓰레기보다 훨씬 더 중요할 것입니다.선착순을 제거하는 모든 것은 쓰레기를 '승리'하는 스릴에 해롭습니다.

 

노바트러스트:그리고 저는 새로운 봇 군주를 환영합니다.우리는 실제로 제3자 앱이 우리 사이트에서 제품 정보를 검색할 수 있도록 RSSfeeds를 제공하지만 기본 사이트 HTML보다 앞서는 것은 아닙니다.내가 올바르게 해석했다면 귀하의 솔루션은 목표 1을 완전히 희생하고 봇이 대부분의 쓰레기를 구매할 것이라는 사실을 포기함으로써 목표 2(성능 문제)를 돕습니다.귀하의 마지막 문단 비관론이 제게는 정확하다고 느껴지기 때문에 귀하의 답변에 찬성표를 던졌습니다.여기에는 묘책이 없는 것 같습니다.

나머지 응답은 일반적으로 IP 추적에 의존하는데, 이는 다시 쓸모가 없고(봇넷/좀비/클라우드 네트워킹 사용) 해로울 수 있습니다(동일 IP 대상에서 온 많은 무고한 사람들을 잡아냄).

다른 접근 방식이나 아이디어가 있나요?내 개발자들은 계속해서 "그냥 CAPTCHA를 해보자"라고 말하지만, 우리의 헛소리를 원하는 모든 실제 인간에게 덜 방해적인 방법이 있기를 바랍니다.

원래 질문

인지 가치가 매우 높은 값싼 제품을 판매하고 있는데 수량은 매우 제한되어 있다고 가정해 보겠습니다.이 물건이 언제 팔릴지 정확히 아는 사람은 아무도 없습니다.그리고 백만 명이 넘는 사람들이 귀하가 판매하는 제품을 보기 위해 정기적으로 방문합니다.

프로그래밍 방식으로 [a] 언제 해당 항목을 판매하는지 파악하고 [b] 해당 항목을 가장 먼저 구매하는 사람이 되도록 하려는 스크립터와 봇이 있습니다.이는 두 가지 이유로 짜증납니다.

  1. 귀하의 사이트는 인간이 아닌 사람들에 의해 중단되어 모든 사람의 모든 작업 속도가 느려집니다.
  2. 스크립터는 결국 제품을 '승리'하게 되고 단골 고객은 속았다는 느낌을 받게 됩니다.

명백해 보이는 해결책은 사용자가 주문하기 전에 건너뛸 수 있는 몇 가지 문제를 만드는 것입니다. 그러나 여기에는 최소한 세 가지 문제가 있습니다.

  • CAPTCHA를 해독하고, 고양이를 골라내고, 수학 문제를 풀어야 하기 때문에 인간에게는 사용자 경험이 형편없습니다.
  • 인식된 이점이 충분히 높고 군중이 충분히 크다면 일부 그룹은 조정을 피하여 군비 경쟁으로 이어질 것입니다.(이는 조정이 간단할수록 특히 그렇습니다.숨겨진 '댓글' 양식, 양식 요소 재배치, 잘못된 라벨 지정, 숨겨진 '잡았어' 텍스트는 모두 한 번만 작동한 다음 이 특정 양식을 대상으로 싸우기 위해 변경해야 합니다.)
  • 스크립터가 귀하의 조정을 '해결'할 수 없더라도 첫 페이지를 꽝 닫은 다음 스크립터가 수동으로 주문을 작성하도록 경고음을 울리는 것을 방지할 수는 없습니다.그들이 [a]를 해결함으로써 이점을 얻는다면, 그들은 주문 페이지에 도달하는 첫 번째 인간이 될 것이기 때문에 여전히 [b]에서 승리할 가능성이 높습니다.추가적으로 1.여전히 발생하여 서버 오류가 발생하고 모든 사람의 성능이 저하됩니다.

또 다른 해결책은 IP가 너무 자주 도달하는지 감시하고, 방화벽에서 차단하거나, 주문을 차단하는 것입니다.이것은 2를 해결할 수 있습니다.[b]를 방지하지만 IP 검색으로 인한 성능 저하가 엄청나고 1과 같은 더 많은 문제가 발생할 가능성이 높습니다.스크립터가 스스로 발생시킨 것보다.또한 클라우드 네트워킹 및 스팸봇 좀비의 가능성으로 인해 IP 확인이 상당히 쓸모 없게 됩니다.

세 번째 아이디어는 주문 양식을 일정 시간(예: 0.5초) 동안 로드하도록 강제하면 빠른 주문의 진행 속도가 잠재적으로 느려질 수 있지만 다시 한 번 말하지만 스크립터는 어떤 속도에서도 작업에 해를 끼치지 않는 첫 번째 사람이 될 것입니다. 실제 사용자.

목표

  1. 스크립팅을 하지 않는 사람에게 항목을 판매합니다.
  2. 봇으로 인해 느려지지 않는 속도로 사이트를 계속 실행하세요.
  3. 인간임을 증명하기 위해 완료해야 하는 작업으로 '일반' 사용자를 귀찮게 하지 마십시오.
도움이 되었습니까?

해결책

보안관과 같은 것을 구현하는 것은 어떻습니까?

정상적으로 사이트를 사용하고 있다면 아마도 사이트를 볼 수 없을 것입니다. 같은 페이지를 너무 자주 다시로드하려면 연속 주석을 너무 빨리 게시하거나 알람을 유발하는 다른 것을 게시하고 인간을 증명하게하십시오. 귀하의 경우, 이것은 아마도 같은 페이지의 일정한 재 장전 일 것입니다. 페이지의 모든 링크를 빨리 따라하거나 인간이 되기에는 너무 빠르게 주문 양식을 작성합니다.

그들이 x 번 연속으로 수표를 실패하면 (예 : 2 또는 3), 해당 IP에 타임 아웃 또는 기타 측정 값을 제공하십시오. 그런 다음 시간 초과가 끝나면 다시 수표로 다시 버립니다.


등록되지 않은 사용자가 사이트에 액세스 할 수 있으므로 계속해서 IP 만 있습니다. 각 브라우저에 세션을 발행하고 원하는 경우 그런 식으로 추적 할 수 있습니다. 물론, 너무 많은 세션이 연속적으로 생성되는 경우 (봇이 쿠키를 계속 삭제하는 경우) 인간 확인을합니다.

너무 많은 무고한 사람들을 잡는 한, 휴먼 확인 페이지에 면책 조항을 올릴 수 있습니다. "이 페이지가 너무 많은 익명의 사용자가 같은 위치에서 당사 사이트를보고있는 경우에도 나타날 수도 있습니다. 피하기 위해 등록하거나 로그인하는 것이 좋습니다. 이것." (문구를 적절하게 조정하십시오.)

게다가, X 사람들이 하나의 IP에서 동시에 같은 페이지를 동시에로드 할 확률은 무엇입니까? 그들이 높으면 봇 알람에 다른 트리거 메커니즘이 필요할 수 있습니다.


편집 : 또 다른 옵션은 너무 많은 시간에 실패하고 제품의 요구에 대해 확신하고 차단하고 개인적으로 블록을 제거하기 위해 전화를 걸도록합니다.

사람들에게 전화를하는 것은 아신 척도처럼 보이지만 컴퓨터 뒤에 사람이 있는지 확인. 핵심은 봇이 아닌 한 거의 일어나지 않는 조건에 대해서만 블록을 제자리에 두는 것입니다 (예 : 연속으로 수표를 여러 번 실패). 그런 다음 인간의 상호 작용을 강요하여 전화를 집어 올립니다.

그들이 저를 부를 것이라는 의견에 응답하여, 여기에 그 트레이드 오프가 있습니다. 사용자가 인간이 판매 할 때 몇 번의 전화를받을 수 있도록 충분히 걱정하십니까? 인간 사용자에게 제품을 얻는 것에 대해 너무 걱정했다면,이 결정을 내려야 할 것입니다.

봇이 사이트를 우위로 가져 오지 않도록 결정한 것처럼 보이므로 전화가 좋은 선택 일 수 있다고 생각합니다. 제품에서 이익을 얻지 못하기 때문에 이러한 전화를받는 데 관심이 없습니다. 그러나 그 이익의 일부를 공유해야했지만, 나는 관심을 갖게 될 것입니다. 이것이 귀하의 제품이므로, 귀하는 얼마나 관심을 갖고 그에 따라 구현하는지 결정해야합니다.


블록을 공개하는 또 다른 방법은 효과적이지 않습니다. 타임 아웃 (그러나 rinse-repeat 이후에 다시 사이트를 슬램 할 것입니다), 긴 타임 아웃 (실제로 제품을 구매하려는 인간이라면). 그들은 SOL과 수표에 실패하기 위해 처벌을받을 것입니다), 이메일 (봇으로 쉽게 수행), 팩스 (동일) 또는 달팽이 메일 (너무 오래 걸리기).

물론 타임 아웃을 얻을 때마다 IP 당 시간 초과 기간이 증가 할 수 있습니다. 진정한 인간을 실수로 처벌하지 않도록하십시오.

다른 팁

봇이 대규모로 비싼 물건을 구매하도록하는 방법을 알아 내야합니다. 12mm 윙넛 : $ 20. 스크립트 작성자가 게임을 결정하기 전에 봇이 얼마나 많이 튀어 나오는지 확인하십시오.

이익을 사용하여 더 많은 서버를 구매하고 대역폭을 지불하십시오.

내 해결책은 봇과 스크립트에 대해 대략 10 분 지연되어 화면 스크래프를 무가치하게 만드는 것입니다.

내가하는 방법은 다음과 같습니다.

  • 반복 타자를 기록하고 식별하십시오.

히트마다 모든 IP 주소를 기록 할 필요는 없습니다. 20 명 정도마다 하나만 추적합니다. 반복 범죄자는 여전히 무작위 때때로 추적에 나타납니다.

  • 페이지 캐시를 약 10 분 이전에서 보관하십시오.

  • 반복 히터/봇이 사이트에 부딪 치면 10 분 오래 된 캐시 된 페이지를 제공하십시오.

그들은 그들이 오래된 사이트를 얻고 있다는 것을 즉시 알지 못할 것입니다. 그들은 그것을 긁어 모을 수있을 것입니다. 그러나 "실제 사람들"은 10 분의 머리 시작을 가질 것이기 때문에 더 이상 어떤 경주도 이길 수는 없습니다.

이익:

  • 사용자에게는 번거 로움이나 문제가 없습니다.
  • 서버 측에서 완전히 구현되었습니다. (JavaScript/Flash에 대한 의존 없음)
  • 오래된 캐시 된 페이지를 제공하는 것은 라이브 페이지보다 성능 집약적이어야합니다. 실제로 이런 식으로 서버의 부하를 줄일 수 있습니다!

단점

  • 일부 IP 주소를 추적해야합니다
  • 이전 페이지의 캐시를 유지하고 유지해야합니다.

어떻게 생각해?

보세요 Ned Batchelder 의이 기사는 여기에 있습니다. 그의 기사는 스팸봇을 중지하는 것에 관한 것이지만, 동일한 기술이 귀하의 사이트에 쉽게 적용될 수 있습니다.

사람들이 자신을 식별하게하여 봇을 멈추지 않고, 우리는 그들이 성공적인 게시물을 만들기 어렵게 만들거나, 실수로 자신을 봇으로 식별하도록함으로써 봇을 멈출 수 있습니다. 이것은 사람들의 부담을 제거하고 주석 양식에 눈에 띄는 안티 스팸 조치가 무료입니다.

이 기술은이 사이트에서 스팸봇을 방지하는 방법입니다. 효과가있다. 여기에 설명 된 방법은 내용을 전혀 보지 않습니다.

다른 아이디어 :

  • 생성 공식적인 제품이 판매 할 때 사람들이 구독 할 수있는 자동 노화 메커니즘 (RSS Feed? Twitter?). 이것은 감소합니다 필요 사람들이 대본을 만들기 위해.
  • 난독 화 기술을 바꾸십시오 직전 새로운 품목이 판매됩니다. 따라서 스크ipters가 무기 경주를 에스컬레이션 할 수 있더라도 항상 하루가 뒤떨어집니다.

편집 : 완전히 명확하게 말하면, NED의 기사는 봇이 양식을 통과하여 주문을 제출하지 못하도록함으로써 품목의 자동 구매를 방지하는 방법을 설명합니다. 그의 기술은 봇이 홈페이지를 스크랩하는 것을 방지하여 당근의 밴드 폴로이가 판매 될시기를 결정하는 데 유용하지 않을 것입니다. 나는 그것이 실제로 가능하다는 것을 막을지 확실하지 않습니다.

NED의 전략의 효과에 대한 귀하의 의견과 관련하여 : 예, 그는 허니 팟에 대해 이야기하지만, 그것이 그의 가장 강력한 전략이라고 생각하지 않습니다. 그의 토론 스피너 내가 그의 기사를 언급 한 원래 이유입니다. 죄송합니다. 원래 게시물에서 더 명확하게하지 않았습니다.

스피너는 몇 가지에 사용되는 숨겨진 필드입니다. 변조 및 재생을 방지하는 여러 값을 모으고 필드 이름을 모호하게하는 데 사용됩니다. 스피너는 MD5 해시입니다.

  • 타임 스탬프,
  • 클라이언트의 IP 주소,
  • 블로그 항목의 항목 ID에 주석을 달고
  • 비밀.

Woot.com에서이를 구현할 수있는 방법은 다음과 같습니다.

새 품목이 판매 될 때마다 해시의 일부로 사용되는 "비밀"값을 변경하십시오. 이것은 누군가가 자동 구매 품목에 봇을 설계하려는 경우 다음 항목이 판매 될 때까지만 작동합니다.!!

누군가가 봇을 신속하게 재건 할 수 있더라도 다른 모든 실제 사용자는 이미 BOC를 구매했으며 문제가 해결되었습니다!

그가 논의한 다른 전략은 변화 Honeypot 기술은 때때로 (다시, 새 항목이 판매 될 때 변경) : :

  • CSS 클래스 (물론 무작위 배정)를 사용하여 필드 또는 포함 요소를 표시 할 요소를 설정하십시오.
  • 필드를 페이지의 배경과 동일하거나 매우 유사하게 색상하십시오.
  • 위치를 사용하여 페이지의 가시 영역에서 필드를 이동하십시오.
  • 포함 된 허니 포트 필드를 표시하기에는 요소를 너무 작게 만드십시오.
  • 필드를 보이지만 포지셔닝을 사용하여 모호한 요소로 덮으십시오.
  • JavaScript를 사용하여 이러한 변경 사항에 영향을 미치므로 봇에 전체 JavaScript 엔진이 있어야합니다.
  • 꿀벌을 다른 들판처럼 표시하지만 사람들에게 아무것도 입력하지 말라고 말하십시오.

내 전반적인 아이디어는 각각의 새로운 아이템이 판매 될 때 양식 설계를 변경하는 것입니다. 또는 적어도 새로운 BOC가 판매 될 때 변경하십시오.

몇 번/월은 무엇입니까?

이 답변을 받아들이면 다음 답변이있을 때 나에게 헤드 업을 주시겠습니까? :)

Q : 스크ipters가 사이트를 수백 번 수백 번 비난하는 것을 어떻게 막을 수 있습니까?
A : 당신은 그렇지 않습니다. 방법이 없습니다 예방하다 외부 에이전트에 의한이 행동.

수신 요청을 분석하기 위해 방대한 기술을 사용하고 누가 인간이 아닌지를 결정하려고 시도 할 수는 있지만 실패 할 것입니다. 결국, 즉시 그렇지 않은 경우.

유일한 실행 가능한 장기 솔루션은 게임을 변경하십시오 따라서 사이트는 봇 친화적이지 않거나 스크립터에게 매력적이지 않습니다.

당신은 어떻게합니까? 글쎄, 그것은 다른 질문입니다! ;-)

...

좋아, 위의 일부 옵션이 주어지고 거부되었습니다. 나는 당신의 사이트에 대해 친숙하지 않으며, 한 번만 보았지만 사람들이 이미지에서 텍스트를 읽을 수 있고 봇이 쉽게 이것을 할 수 없기 때문에, 발표를 이미지로 변경하십시오. 보안 문자가 아닙니다, 단지 이미지 -

  • 페이지가 요청되면 이미지 (물론 캐시)를 생성합니다.
  • 이미지 소스 이름을 동일하게 유지하십시오.
  • 대부분의 경우 이미지에는 일반 텍스트가 있으며 인라인 HTML 페이지의 일부로 보이도록 정렬됩니다.
  • 게임이 'on'인 경우 이미지가 공지서 텍스트로 변경됩니다.
  • 발표 텍스트에는 URL 및/또는 코드가 표시됩니다. 수동으로 입력해야합니다 상을 받기 위해. CARTCHA 원하는 경우 코드를보십시오. 그러나 그것은 필요하지 않을 것입니다.
  • 추가 보안을 위해 코드는 요청/IP/에이전트를 위해 특별히 생성 된 일회성 토큰이므로 반복 된 요청이 다른 코드를 생성 할 수 있습니다. 또는 주문형 생성이 너무 과세되는 경우 많은 임의 코드 (일회성 패드)를 사전 생성 할 수 있습니다.

실제 사람들의 시간 재판을 실행하고 이에 응답하고 무시하십시오 ( '죄송합니다. 오류가 발생했습니다. 죄송합니다! 다시 시도하십시오') 응답은이 시간의 절반보다 빠르게 응답합니다. 이 이벤트는 또한 적어도 하나의 봇이 코드/게임을 알아 냈다는 경고를 발전시켜야하므로 코드/게임을 변경해야합니다.

봇이 트리거되지 않더라도 스크립터의 시간을 낭비하기 위해 게임을 주기적으로 계속 변경하십시오. 결국 스크ipters는 게임의 피곤하고 다른 곳으로 가야합니다 ... 우리는 희망합니다 ;-)

마지막 제안 : 메인 페이지 요청이 들어 오면 대기열에 넣으십시오 별도의 프로세스에서 순서대로 요청에 응답합니다 (웹 서버를 해킹/확장해야 할 수도 있지만 가치가있을 수 있습니다). 첫 번째 요청이 대기열에있는 동안 동일한 IP/에이전트의 다른 요청이 들어 오면 무시하십시오. 이것은 봇에서 부하를 자동으로 흘려야합니다.

편집 : 이미지를 사용하는 것 외에도 다른 옵션은 JavaScript를 사용하여 Buy/No-Buy 텍스트를 채우는 것입니다. 봇은 JavaScript를 거의 해석하지 않으므로 보지 못할 것입니다.

나는 이것이 얼마나 실현 가능한지 모르겠다 : ... 공격을 계속하십시오.

봇이 스캔하는 데이터를 파악하십시오. 쓰레기를 팔지 않을 때 원하는 데이터를 공급하십시오. 인간 사용자를 귀찮게하거나 혼동하지 않는 방식으로이를 수행하십시오. 봇이 2 단계를 트리거하면 로그인하여 BOC 대신 $ 100 룸바를 구매하기 위해 양식을 작성합니다. 물론 이것은 봇이 특히 강력하지 않다고 가정합니다.

또 다른 아이디어는 가방 O 크랩 판매 기간 동안 임의의 가격 하락을 구현하는 것입니다. $ 20에 불과하다고 명확하게 진술하면 누가 150 달러에 무작위 가방을 구입할 것인가? 과도한 봇 외에는 아무도 없습니다. 그러나 9 분 후에 그것은 $ 35 달러입니다 ... 그런 다음 17 분 후에 $ 9입니다. 또는 무엇이든.

물론, 좀비 왕은 반응 할 수있을 것입니다. 요점은 그들의 실수가 그들에게 매우 비싸게되도록하는 것입니다 (그리고 그들이 그들과 싸우기 위해 당신에게 돈을 지불하게하는 것입니다).

이 모든 것은 당신이 일부 봇 군주를 화나게하고 싶다고 가정합니다. 100% 권장되지 않을 수 있습니다.

따라서 문제는 실제로 보이는 것 같습니다. 봇은 인식 된 가격으로 인식 된 가치가 높기 때문에 "가방 'O Crap"을 원합니다. 당신은 때때로이 아이템을 제공하고 봇은 숨어 있고, 사용할 수 있는지 확인하고 아이템을 구입합니다.

봇 소유자가 이익을 창출하는 (또는 잠재적으로 이익을 창출하는 것)처럼 보이기 때문에이 요령은 이것을 격려 그들은 쓰레기를 사기 위해.

첫 번째, 언제나 "bag 'o crap"을 제공하십시오.

둘째, 쓰레기가 일반적으로 쓰레기인지 확인하십시오.

셋째, 쓰레기를 자주 회전시킵니다.

간단합니까?

당신은 영구적 인 "우리의 쓰레기가 때때로 쓰레기가 있습니까?" 제안 옆에 링크를 링크하여 무슨 일이 일어나고 있는지 인간에게 설명하십시오.

봇이 쓰레기가 있고 쓰레기가 자동으로 구매되는 것을보고, 수령인은 부러진 이쑤시개에 대해 10 달러를 지불 한 것에 대해 끔찍하게 화를 내게 될 것입니다. 그리고 빈 쓰레기 봉투. 그리고 신발 바닥에서 약간의 먼지가 있습니다.

그들이 비교적 짧은 시간 에이 쓰레기를 충분히 구매한다면 (그리고 당신 이이 일을하는지 설명하는 곳에서 큰 면책 조항이 있다면, 그들은 공정한 "bag 'o cash"를 잃게 될 것입니다. 가방 'O crap ". 인간의 개입조차도 (쓰레기가 쓰레기가 아닌지 확인하는 것은 쓰레기를 충분히 회전 시키면 실패 할 수 있습니다). 도대체, 아마도 봇은 너무 짧은 시간 동안 로테이션에 있던 것을 알아 차리고 사지 않을 것입니다. 그러나 이는 인간이 비국어를 구매할 것임을 의미합니다.

도대체, 당신의 일반 고객은 너무 즐거워서 이것을 막대한 마케팅 승리로 바꿀 수 있습니다. "쓰레기"잉어가 판매되는 양을 게시하십시오. 사람들은 봇이 얼마나 힘든지보기 위해 돌아올 것입니다.

업데이트: 사람들이 불평하는 사람들과 몇 번의 전화를받을 수있을 것으로 기대합니다. 나는 당신이 그것을 완전히 멈출 수 있다고 생각하지 않습니다. 그러나 이것이 봇을 죽이면 언제든지 봇을 멈추고 나중에 다시 시작할 수 있습니다.

  1. 비 스크립트 인간에게 품목을 판매하십시오.

  2. 봇에 의해 속도가 느려지지 않은 속도로 사이트를 유지하십시오.

  3. 자신이 인간을 증명하기 위해 완료하기 위해 어떤 작업을 완료 해야하는 '정상적인'사용자를 번거롭지 마십시오.

당신은 아마 이것을 듣고 싶지 않을 것입니다. 그러나 #1과 #3은 상호 배타적입니다.

On the Internet, nobody knows you

글쎄, 아무도 당신이 봇이라는 것을 아는 사람은 없습니다. 사람이 무언가를 할 필요없이 연결의 다른 쪽 끝에 인간이 있는지 여부를 알려주는 프로그램적인 방법은 없습니다. 스크립트/봇이 웹에서 물건을 수행하는 것을 방지하는 것은 보안 문자가 발명 된 모든 이유입니다. 이것은 많은 노력이 소비되는 새로운 문제와는 다릅니다. 더 나은 방법이 있다면, 볼트 차가하는 실제 사용자에게 번거 로움을 포함하지 않은 사람은 모두 이미 그것을 사용하고있을 것입니다.

나는 당신이 주문 페이지에서 봇을 유지하고 싶다면 좋은 보안관이 그것을하는 유일한 방법이라는 사실에 직면해야한다고 생각합니다. 무작위 쓰레기에 대한 수요가 충분히 높으면 사람들 이이 길이를 기꺼이 얻으려고 할 정도로 합법적 인 사용자는 보안 문자에 의해 해고되지 않을 것입니다.

Woot 가이 문제와 싸우는 데 사용하는 방법은 문자 그대로 게임을 바꾸는 것입니다. 그들이 매우 바람직한 아이템을 판매 할 때, 사용자는 주문하기 위해 비디오 게임을 할 수있게합니다.

그것은 성공적으로 봇과 싸우는 것뿐만 아니라 (자동 플레이어를 피하기 위해 게임을 쉽게 변경하거나 각 판매에 대한 새로운 게임을 제공 할 수 있음), 또한 원하는 항목을 "승리"하면서 느려지면서 "승리"에 대한 인상을줍니다. 주문 프로세스.

여전히 매우 빠르게 판매하지만 솔루션이 좋다고 생각합니다. 문제를 다시 평가하고 매개 변수를 변경하면 엄격하게 기술적 인 솔루션이 존재하지 않는 성공적인 전략으로 이어졌습니다.


전체 비즈니스 모델은 "First Come, First Serv"를 기반으로합니다. 라디오 방송국이 한 일을 할 수는 없습니다 (그들은 더 이상 첫 번째 발신자를 승자로 만들지 않고 5 위 또는 20 위 또는 13 번째 발신자를 승자로 만듭니다) - 기본 기능과 일치하지 않습니다.

아니요, 실제 사용자의 주문 경험을 변경하지 않고는이 작업을 수행 할 방법이 없습니다.

이 모든 전술을 구현한다고 가정 해 봅시다. 이것이 중요하다고 결정하면 100 명이 나와 함께 일할 수있게되면 100 개의 별도 컴퓨터에서 작동하기 위해 소프트웨어를 구축하고 초당 20 배 (각 사용자의 액세스간에 5 초 사이//// 쿠키/계정/IP 주소).

두 단계가 있습니다.

  1. 첫 페이지보기
  2. 주문

당신은 보안 문자 차단 #1을 넣을 수 없습니다 - 그것은 실제 고객을 잃게 될 것입니다 ( "무엇? 최신 woot를보고 싶을 때마다 보안 문자를 해결해야합니까?!?").

그래서 내 작은 그룹을 시청하고, 함께 시간에 약 20 개의 점검을 받고, 첫 번째 변경 사항을 보는 사람은 첫 번째 다른 모든 사람들에게 첫 번째 알림을 보는 사람은 첫 페이지를 다시로드하고 주문 링크를 따라 거래를 수행합니다 (거래를 수행합니다). 보안 문자를 구현하고 모든 wootoff/boc에 대해 변경하지 않는 한 자동으로 발생할 수도 있습니다).

당신은 #2 앞에 보안관을 넣을 수 있으며, 당신이 그것을 혐오하는 동안, 그것은 봇이 첫 페이지를 보더라도 실제 사용자가 제품을 얻는 것을 확인하는 유일한 방법 일 수 있습니다.

그러나 Captcha를 사용해도 100의 작은 밴드는 여전히 중요한 첫 번째 발동기 이점을 가질 것입니다. 그리고 우리가 인간이 아니라고 말할 수있는 방법은 없습니다. 액세스 타이밍을 시작하면 지터를 추가합니다. 우리는 어떤 컴퓨터를 새로 고칠 수 있는지 무작위로 선택하여 액세스 순서가 끊임없이 변경 될 수 있지만 여전히 사람처럼 보입니다.

먼저 간단한 봇을 제거하십시오

요청을 시청하는 적응 형 방화벽이 필요하고 누군가가 명백한 멍청한 일을하고 있다면 - 같은 IP에서 1 초 이상을 상쾌하게하고 전술을 사용하여 속도를 늦추십시오 (물방울, 거부 또는 500 오류 등을 보내십시오. ).

이렇게하면 트래픽이 크게 떨어지고 봇 사용자가 사용하는 전술을 변경해야합니다.

둘째, 서버를 화나게 빠르게 만드십시오.

당신은 정말로 이것을 듣고 싶지 않지만 ...하지만 ...

나는 당신이 필요로하는 것이 바닥에서 완전히 맞춤 솔루션이라고 생각합니다.

TCP/IP 스택을 엉망으로 만들 필요는 없지만 사용자 연결을 연관시키고 다양한 공격에 적절하게 반응하기 위해 구축 된 매우 빠른 빠른 사용자 정의 서버를 개발해야 할 수도 있습니다.

Apache, Lighthttpd 등은 모두 유연성이 있지만 단일 목적 웹 사이트를 운영하고 있으며 현재 서버가 트래픽 처리 및 적절하게 봇과 싸우는 것보다 더 많은 것을 수행 할 수 있어야합니다. ).

사용자 정의 서버에서 크게 정적 웹 페이지 (30 초마다 업데이트)를 제공하면 요청 수와 트래픽을 10 배 처리 할 수있을뿐만 아니라 서버가 요청을 받고 읽는 것 외에는 아무것도하지 않기 때문에. 메모리에서 TCP/IP 버퍼로의 페이지) 그러나 봇 속도를 늦추는 데 도움이 될 수있는 메트릭에 액세스 할 수 있습니다. 예를 들어, IP 주소를 상관 시키면 IP 당 1 초당 두 개 이상의 연결을 차단할 수 있습니다. 인간은 그보다 더 빨리 갈 수 없으며 동일한 Nated IP 주소를 사용하는 사람들조차도 드물게 차단됩니다. 천천히 블록을하고 싶을 것입니다. 공식적으로 세션을 종료하기 전에 연결을 1 초 동안 내버려 두십시오. 이것은 방화벽에 공급되어 특히 심각한 범죄자에게 장기 블록을 제공 할 수 있습니다.

그러나 현실은 당신이 무엇을하든, 봇이 단일 목적으로 인간이 맞춤 제작 될 때 봇과는 별도로 인간에게 말할 수있는 방법이 없다는 것입니다. 봇은 단지 인간을위한 대리일 일뿐입니다.

결론

하루가 끝나면 첫 페이지를 시청하기 위해 인간과 컴퓨터를 구분할 수 없습니다. 주문 단계에서 봇을 멈출 수 있지만 BOT 사용자는 여전히 첫 번째 발동기 이점을 가지고 있으며 여전히 관리하기에 큰 부하가 있습니다.

간단한 봇에 대한 블록을 추가 할 수 있습니다. 충분할 수 있습니다.

그러나 기본 모델을 변경하지 않으면 운이 좋지 않습니다. 당신이 할 수있는 최선은 간단한 사례를 관리하고, 서버를 너무 빠른 일반 사용자를 눈치 채지 못하고, 많은 품목을 판매하는 것입니다. .

허니 포트를 설정하고 사용자 계정을 봇 사용자로 표시하는 것을 고려할 수 있지만, 이는 엄청난 부정적인 커뮤니티 백래시를 가질 것입니다.

"글쎄,이 작업을 수행하는 것은 어떻습니까 ..."를 생각할 때마다 항상 적절한 봇 전략에 대응할 수 있습니다.

첫 페이지를 주문 페이지에 도달하기 위해 보안관을 만들더라도 ( "이 항목의 주문 버튼은 파란색이며,이 페이지의 어딘가에는 핑크색 반짝임") 봇은 단순히 페이지의 모든 링크를 열고 어느 쪽이든 사용하는 것을 사용합니다. 주문 페이지로 돌아갑니다. 그것은 이것을 이길 방법이 아닙니다.

서버를 빨리 만들고, 쉽게 속일 수없는 유일한 것을 발견했지만 아마도 응용 프로그램에 너무 느리게 발견되었을 것입니다) 서버를 넣고 모델을 약간 변경하는 방법에 대해 생각해보십시오. 일반 사용자는 봇 사용자만큼 좋은 기회가 있습니다.

-아담

부인 성명:이 답변은 프로그래밍과 전혀 관련이 없습니다.그러나 먼저 스크립트의 이유를 공격하려고 합니다.

또 다른 아이디어는 정말 판매할 수량이 한정되어 있다면 선착순 방식에서 벗어나는 것이 어떨까?물론, 과대광고가 마케팅 계획의 일부가 아닌 한.

다른 많은 옵션이 있으며 다른 사람들도 몇 가지 다른 옵션을 생각할 수 있다고 확신합니다.

  • 주문 대기열(선주문 시스템) - 일부 스크립트는 여전히 대기열 맨 앞에 있을 수 있지만 정보를 수동으로 입력하는 것이 더 빠를 수 있습니다.

  • 추첨 시스템(주문하려는 모든 사람이 시스템에 입력됩니다) - 이 방법으로 스크립트를 가진 사람은 없는 사람과 동일한 기회를 갖게 됩니다.

  • 급한 우선순위 대기열 - 인지된 가치가 정말 높다면 사람들은 기꺼이 더 많은 비용을 지불할 의향이 있습니다.주문 대기열을 구현하되 사람들이 대기열에서 더 높은 위치에 배치되도록 더 많은 비용을 지불하도록 허용합니다.

  • 경매(이것에 대한 크레딧은 David Schmitt에게 있으며 의견은 본인의 것임) - 사람들은 여전히 ​​스크립트를 사용하여 마지막 순간에 저격할 수 있지만 가격 구조가 바뀔 뿐만 아니라 사람들은 다른 사람들과 싸우게 될 것으로 예상합니다. .또한 특정 기간 동안 입찰 횟수를 제한하고 사람들이 미리 전화하여 인증 코드를 받도록 하는 등의 작업을 수행할 수도 있습니다.

나치의 의사 소통이 아무리 안전하다고 생각하더라도 동맹국은 종종 메시지를 깨뜨릴 것입니다. 봇이 사이트 사용을 중단하려고하더라도 BOT 소유자는 주변의 길을 찾을 수 있습니다. 당신을 나치로 만들면 미안합니다 :-)

다른 사고 방식이 필요하다고 생각합니다

  • 봇이 사이트 사용을 중단하려고하지 마십시오.
  • 즉시 작동하는 수정을하지 마십시오. 긴 게임을 플레이하십시오.

귀하의 사이트의 고객이 인간인지 봇인지는 중요하지 않다는 사고 방식을 얻으십시오. 둘 다 고객에게 돈을 지불하고 있습니다. 그러나 하나는 다른 하나에 비해 부당한 이점이 있습니다. 많은 사회 생활이없는 일부 사용자 (은자)는 사이트의 다른 사용자에게 봇처럼 성가 시게 될 수 있습니다.

제안을 게시하는 시간과 계정이 구매하기로 선택한 시간을 기록하십시오.

이것은 고객이 얼마나 빨리 물건을 구매하고 있는지에 대한 기록을 제공합니다.

제안을 게시하는 시간이 다릅니다.

예를 들어, 하루 중 어리석은 시간 (자정입니까?)에서 3 시간의 창을 시작하십시오 (자정?) 봇과 은자 만 몇 초 안에 주문을 받기 위해 3 시간 동안 페이지를 끊임없이 새로 고쳐집니다. 기본 시간을 바꾸지 않고 창 크기 만 변경하십시오.

시간이 지남에 따라 사진이 나타날 것입니다.

01 : 생방송 몇 초 이내에 제품을 정기적으로 구매하는 계정을 확인할 수 있습니다. 그들이 봇 일 수 있다고 제안합니다.

02 : 또한 제안에 사용 된 시간의 창을 볼 수 있습니다. 창이 1 시간이면 일부 초기 구매자는 인간이됩니다. 인간은 4 시간 동안 거의 상쾌하지 않을 것입니다. 경과 시간이 창 기간에 관계없이 게시/구매 사이에 상당히 일관된 경우 봇입니다. 게시/구매 시간이 작은 창에 짧고 큰 창에 더 길어지면 은둔자입니다!

이제 봇이 사이트를 사용하지 않도록 중지하는 대신 봇에서 확실히 사용되는 계정과 은자가 사용할 수있는 계정을 알려주는 충분한 정보가 있습니다. 당신이 그 정보로하는 일은 당신에게 달려 있지만, 당신은 확실히 그것을 사용하여 당신의 사이트를 생명을 가진 사람들에게 공정하게 만들 수 있습니다.

봇 계정을 금지하는 것은 무의미 할 것이라고 생각합니다. 히틀러에게 전화를 걸고 "U-Boats의 위치에 감사합니다!" 어떻게 든 계정 소유자가 실현하지 못하는 방식으로 정보를 사용해야합니다. 내가 꿈을 꿀 수 있는지 봅시다 .....

대기열의 프로세스 주문 :

고객이 주문을 할 때 즉시 확인 이메일을 받고 주문이 대기열에 배치되어 처리 된 경우 알림을받습니다. 나는 아마존에서 주문/파견으로 이런 종류의 경험을 경험하고 전혀 신경 쓰지 않습니다. 나는 이메일을받는 것이 마음에 들지 않습니다. 아마존은 내가이 책을 원한다는 것을 알고 있습니다. 귀하의 경우 이메일이 될 것입니다

  1. 주문이 배치되었으며 대기열에 있습니다.
  2. 주문이 처리되었습니다.
  3. 주문이 파견되었습니다.

사용자는 자신이 공정한 대기열에 있다고 생각합니다. 1 시간마다 큐를 처리하여 일반 사용자가 의심을 불러 일으키지 않도록 대기열을 경험하도록하십시오. "평균 인간 주문 시간 + x 시간"의 대기열에 있으면 BOT 및 HERMIT 계정의 주문 만 처리합니다. 인간에게 봇을 효과적으로 줄입니다.

API를 사용하여 가격 정보를 노출한다고 말합니다. 이것은 직관적이지 않은 솔루션이지만 상황에 대한 통제력을 제공하기 위해 노력합니다. API에 몇 가지 제한 사항을 추가하여 웹 사이트보다 약간 덜 기능합니다.

주문을 위해 똑같이 할 수 있습니다. 원하는 효과를 얻을 때까지 API 기능/성능의 작은 변경 사항을 실험 할 수 있습니다.

IP 수표를 물리 치기위한 프록시와 봇넷이 있습니다. 매우 좋은 보안 문자 읽기 스크립트가 있습니다. 인도에는 작은 가격으로 보안 문자를 물리 치는 노동자 팀도 있습니다. 당신이 생각해 낼 수있는 모든 해결책은 합리적으로 패배 할 수 있습니다. NED Batchelder의 솔루션조차도 웹 브라우저 컨트롤 또는 봇넷 또는 프록시 목록과 결합 된 기타 시뮬레이션 브라우저를 사용하여 과거를 진행할 수 있습니다.

우리는 현재 F5의 최신 BIGIP로드 밸런서를 사용하여이를 수행하고 있습니다. BIGIP에는 단일 IP의 소스 세트 중에서도 빈도 및 사용 패턴에 따라 스크레이퍼 및 봇을 식별 할 수있는 고급 트래픽 관리 기능이 있습니다. 그런 다음 이것들을 스로틀, 대체 컨텐츠를 제공하거나 헤더 또는 쿠키로 태그를 지정하여 응용 프로그램 코드에서 식별 할 수 있습니다.

일종의 "보안 문자 게임"과 같이 인간의 상호 작용이 필요한 지연을 도입하는 것은 어떻습니까? 예를 들어, 30 초 동안 체크 무늬 공을 파열시키고 단단한 공을 터뜨리는 것을 피해야하는 작은 플래시 게임 일 수 있습니다 (색맹 문제를 피하십시오!). 게임에는 임의의 숫자 시드가 주어지며 게임이 서버로 전송되는 것은 사용 된 시드와 함께 클릭 포인트의 좌표 및 타임 스탬프가 될 것입니다.

서버에서는 해당 시드를 사용하여 게임 메커니즘을 시뮬레이션하여 클릭이 실제로 공을 터뜨 렸는지 확인합니다. 그들이 그렇게한다면, 그들은 인간뿐만 아니라 스스로를 검증하는 데 30 초가 걸렸습니다. 그들에게 세션 ID를주세요.

해당 세션 ID가 좋아하는 일을하도록하지만 너무 많은 요청을한다면 다시 연주하지 않고도 계속할 수 없습니다.

먼저 여기서 우리가 해야 할 일을 요약해 보겠습니다.원래 질문을 의역한 것일 뿐이라는 것을 알고 있지만 100% 정확하게 이해하는 것이 중요합니다. 4개 중 2~3개를 맞추는 훌륭한 제안이 많이 있기 때문입니다. 모든 요구 사항을 충족하는 다각적인 접근 방식입니다.

요구사항 1:'봇 슬래밍' 제거:

첫 페이지의 급속한 '슬래밍'은 사이트 성능을 저하시키고 있으며 문제의 핵심입니다.'슬래밍'은 단일 IP 봇과 봇넷 모두에서 발생합니다.우리는 둘 다 제거하고 싶습니다.

요구사항 2:사용자 경험을 망치지 마세요:

우리는 교환원에게 전화를 걸거나 여러 CAPTCHA를 해결하는 등 불쾌한 확인 절차를 구현하여 봇 상황을 매우 효과적으로 해결할 수 있지만 이는 모든 무고한 비행기 승객이 희박한 기회를 위해 미친 보안 고리를 뛰어넘도록 강요하는 것과 같습니다. 가장 어리석은 테러리스트를 잡는 것입니다.아 잠깐만요 - 실제로 그렇게 하고 있어요.하지만 우리가 할 수 있는지 보자 ~ 아니다 woot.com에서 그렇게 하세요.

요구사항 3:'군비 경쟁' 방지:

당신이 언급한 것처럼, 당신은 스팸봇 군비 경쟁에 얽매이고 싶지 않습니다.따라서 숨겨져 있거나 뒤죽박죽된 양식 필드, 수학 질문 등과 같은 간단한 조정은 본질적으로 사소하게 자동 감지되고 우회될 수 있는 모호한 조치이므로 사용할 수 없습니다.

요구사항 4:'경보' 봇 차단:

이는 귀하의 요구 사항 중 가장 어려울 수 있습니다.효과적인 인간 검증 문제를 만들 수 있더라도 봇은 여전히 ​​첫 페이지를 폴링하고 새로운 제안이 있을 때 스크립터에게 경고할 수 있습니다.우리는 그러한 봇도 실행 불가능하게 만들고 싶습니다.이는 첫 번째 요구 사항보다 더 강력한 버전입니다. 봇은 성능을 저하시키는 빠른 속도의 요청을 발행할 수 없을 뿐만 아니라 승리할 시간에 맞춰 스크립터에게 '경보'를 보낼 만큼 충분히 반복적인 요청도 발행할 수 없기 때문입니다. 제안.


좋습니다. 그러면 네 가지 요구 사항을 모두 충족할 수 있는지 살펴보겠습니다.첫째, 앞서 언급했듯이 어떤 측정 방법도 효과를 발휘할 수 없습니다.이를 달성하려면 몇 가지 트릭을 결합해야 하며 두 가지 성가심을 삼가야 합니다.

  1. 농구를 뛰어넘으려면 소수의 사용자가 필요합니다.
  2. 소수의 사용자는 특별 혜택을 받을 수 없습니다.

이것이 짜증스럽다는 것을 알지만, '작은' 숫자를 만들 수 있다면 충분히 작은, 나는 당신이 부정적인 것보다 긍정적인 것이 더 크다는 데 동의하기를 바랍니다.

첫 번째 측정:사용자 기반 제한:

이것은 생각할 필요도 없는 일이며 여러분이 이미 하고 있을 것이라고 확신합니다.사용자가 로그인한 상태에서 초당 600회(또는 그 정도) 새로 고침을 계속하면 응답을 멈추고 냉각시키라고 지시합니다.실제로 그보다 훨씬 더 빨리 그의 요청을 제한할 수도 있지만 아이디어는 얻을 수 있습니다.이렇게 하면 로그인된 봇이 사이트 폴링을 시작하자마자 금지/제한됩니다.이것은 쉬운 부분입니다.인증되지 않은 봇은 우리의 실제 문제입니다.

두 번째 측정값:거의 모든 사람이 제안한 일종의 IP 제한 형태:

무슨 일이 있어도 해야 할 일 일부 '봇 슬래밍'을 방지하기 위한 IP 기반 제한입니다.인증되지 않은(로그인하지 않은) 방문자가 특별 혜택을 받을 수 있도록 허용하는 것이 중요해 보이기 때문에 처음에는 IP만 통과하고 완벽하지는 않지만 하다 단일 IP 봇에 맞서 작동합니다.봇넷은 다른 짐승이지만 이에 대해서는 다시 다루겠습니다.지금은 빠른 단일 IP 봇을 물리치기 위해 몇 가지 간단한 조절을 수행하겠습니다.

다른 모든 처리 전에 IP 검사를 실행하고, 조절 논리에 프록시 서버를 사용하고, IP를 memcached 조회 최적화 트리 구조에 저장하면 성능 저하가 무시할 수 있습니다.

세 번째 측정값:캐시된 응답으로 스로틀 클로킹:

빠른 속도의 단일 IP 봇이 제한된 상태에서도 느린 단일 IP 봇을 처리해야 합니다.스로틀링이 방지하는 것보다 약간 더 멀리 요청 간격을 두어 '레이더 아래로 비행'하도록 특별히 조정된 봇입니다.

느린 단일 IP 봇을 즉시 쓸모없게 만들려면 abelenky가 제안한 전략을 사용하면 됩니다.지난 24시간 동안 발견된 모든 IP에 10분 동안 캐시된 페이지를 제공합니다.그렇게 하면 모든 IP는 일/시간/주당 한 번의 '기회'를 얻게 되며(선택한 기간에 따라), 승리하지 못한다는 점을 제외하고는 '다시 로드'를 누르는 실제 사용자에게는 눈에 띄는 불편함이 없을 것입니다. 제안.

이 측정값의 장점은 다음과 같습니다. 또한 봇넷에서 발생하지 않는 한 '알람 봇'을 방해합니다.

(실제 사용자가 계속해서 새로 고침을 허용한다면 아마도 이를 선호할 것이라는 것을 알고 있지만 CAPTCHA 또는 이와 유사한 것 없이 새로 고침 스팸을 보내는 인간과 요청 스팸 봇을 구분할 수 있는 방법은 없습니다.)

네 번째 측정값:리캡차:

CAPTCHA가 사용자 경험에 해를 끼치므로 피해야 한다는 말씀이 맞습니다.그러나 _하나_ 상황에 따라 그들은 당신의 가장 친한 친구가 될 수 있습니다:봇을 저지하기 위해 매우 제한적인 시스템을 설계한 경우 해당 시스템은 그 제한성으로 인해 많은 오탐지를 포착합니다.그런 다음 CAPTCHA가 제공되었습니다. 최후의 수단으로 실제 사용자가 귀하의 제한으로 인해 빠져나갈 수 있도록 허용합니다(따라서 성가신 DoS 상황을 방지).

물론 가장 좋은 점은 모든 봇이 네트워크에 갇히는 반면, 실제 사용자 중 극히 소수만이 CAPTCHA로 인해 방해를 받는 경우입니다.

10분 전에 캐시된 페이지를 제공할 때 대안도 제공한다면, 선택 과목, CAPTCHA 검증된 '첫 페이지 새로 고침', 그 다음에는 인간이 정말 계속 새로 고침을 원하면 이전에 캐시된 페이지를 가져오지 않고도 그렇게 할 수 있지만 새로 고칠 때마다 CAPTCHA를 해결해야 합니다.저것 ~이다 성가심, 하지만 선택적인 것 더 관대해지는 경향이 있는 열렬한 사용자를 위한 것입니다. 알다 그들은 기회를 높이기 위해 시스템을 조작하고 있으며, 향상된 기회는 공짜로 주어지지 않습니다.

다섯 번째 측정값:미끼 쓰레기:

Christopher Mahan은 내가 좋아하는 아이디어를 가지고 있었지만 나는 그것에 대해 다른 해석을 가했습니다.새로운 제안을 준비할 때마다 20달러짜리 12mm 윙너트와 같이 인간이 선택하지 않을 두 가지 다른 '제안'도 준비하세요.제안이 첫 페이지에 나타나면 세 가지 '제안'을 모두 같은 그림에 넣고 각 제안에 해당하는 번호를 입력하십시오.사용자/봇이 실제로 품목을 주문할 때 원하는 제안을 선택해야 하며(라디오 버튼) 대부분의 봇은 단순히 추측하기 때문에 3개 중 2개의 경우에 봇은 가치 없는 제품을 구매하게 됩니다. 정크.

당연히 이것은 '알람 봇'을 다루지 않으며 누군가가 올바른 항목을 선택할 수 있는 봇을 만들 수 있는 (희박한) 가능성이 있습니다.그러나 실수로 정크를 구매할 위험으로 인해 스크립터는 완전히 자동화된 봇에서 완전히 멀어지게 됩니다.

여섯 번째 측정값:봇넷 제한:

[삭제됨]

좋아요............나는 이제 저녁 시간의 대부분을 이것에 대해 생각하고 다른 접근법을 시도하면서 보냈습니다....글로벌 지연....쿠키 기반 토큰..대기 중인 서비스 중...'낯선 스로틀링'…그리고 그것은 작동하지 않습니다.그렇지 않습니다.귀하가 아직 답변을 수락하지 않은 주된 이유는 분산/좀비 넷/봇넷 공격을 저지할 방법을 아무도 제안하지 않았기 때문이라는 것을 깨달았습니다....그래서 정말 깨고 싶었어요.나는 인증을 위한 봇넷 문제를 다른 실, 그래서 나는 당신의 문제에 대해서도 큰 기대를 가지고있었습니다.그러나 내 접근 방식은 이것으로 해석되지 않습니다.통과할 수 있는 IP만 있고, 충분히 큰 봇넷은 IP 주소를 기반으로 한 분석에서 그 자체를 드러내지 않습니다.

그럼 거기 있어요:내 여섯 번째 측정값은 없음입니다.아무것도 아님.지퍼.봇넷이 작거나 일반적인 IP 제한에 걸릴 만큼 빠르지 않는 한, 저는 알 수 없습니다. 어느 CAPTHA와 같이 명시적인 인간 확인을 포함하지 않는 봇넷에 대한 효과적인 조치입니다.죄송하지만 위의 다섯 가지 조치를 결합하는 것이 최선의 방법이라고 생각합니다.그리고 아마도 abelenky의 10분 캐싱 트릭만으로도 괜찮을 것입니다.

이미 게시 된 몇 가지 다른 / 더 나은 솔루션이 있지만 완전성을 위해 이것을 언급 할 것이라고 생각했습니다.

주요 관심사가 성능 저하이고 진실을보고 있다면 망치, 당신은 실제로 DOS 공격을 다루고 있으며, 그에 따라 처리하려고 시도해야합니다. 일반적인 접근법 중 하나는 초당 여러 연결 후 방화벽의 IP에서 패킷을 단순히 드롭하는 것입니다. 예를 들어, 표준 Linux 방화벽 인 iptables는 표준 작동 일치 함수 'Hashlimit'을 가지고 있으며, 이는 시간 단위 당 연결 요청을 IP-Address와 연관시키는 데 사용할 수 있습니다.

그러나이 질문은 아마도 마지막으로 소식을 전한 다음에 언급 된 다음 공개에 대해 더 적합하지만 아직 출시되지 않았으므로 대답해도 괜찮다고 생각합니다. :)

편집하다:
Novatrust가 지적했듯이 여전히 ISP는 실제로 고객에게 IP를 할당하지 않기 때문에 효과적으로 이러한 ISP의 스크립트 커스토머는 해당 ISP로부터 모든 커스텀머를 비활성화 할 것입니다.

TARPIT를 구현하는 응용 프로그램 앞의 Apache 서버에 리버스 프록시를 작성하십시오. (위키 백과 기사) 봇을 처벌하기 위해. 지난 몇 초 안에 연결된 IP 주소 목록을 단순히 관리합니다. 단일 IP 주소에서 요청 버스트를 감지 한 다음 응답하기 전에 해당 요청을 지구적으로 지연시킵니다.

물론, 여러 인간이 NAT'D 네트워크 연결에 있다면 동일한 IP 주소에서 나올 수 있지만 인간이 응답 시간이 2ms에서 4ms (또는 400ms)로가는 반면 봇은 방해받지 않을 것입니다. 지연이 꽤 빨리 증가함으로써.

  1. 대역폭을 먹지 않도록 RSS 피드를 제공하십시오.
  2. 구매할 때 모든 사람이 기다리게합니다 무작위의정확히 찾고있는 것에 따라 최대 45 초의 시간 또는 그 밖의 시간. 당신의 타이밍 제약은 정확히 무엇입니까?
  3. 모든 사람에게 1 분 동안 그림을 위해 이름을 넣은 다음 무작위로 사람들을 선택하십시오. 나는 이것이 가장 공정한 방법이라고 생각합니다.
  4. 계정을 모니터링하고 (세션에 시간을 포함시키고 저장합니까?) 인간 속도 임계 값보다 낮은 것처럼 보이는 계정에 지연을 추가하십시오. 그것은 적어도 봇을 느리게하고 인간과 경쟁하도록 프로그래밍되게 할 것입니다.

우선, 정의상, 정의에 따르면, 진정한 익명의 트랜잭션을 지원하는 동시에 봇을 합법적 인 사용자와 분리 할 수있는 것은 불가능합니다.

첫 페이지 히트작에서 브랜드 스팽킹 새로운 Woot 방문자에게 약간의 비용을 부과 할 수 있다는 전제를 수락 할 수 있다면 가능한 솔루션이 있다고 생각합니다. 더 나은 이름이 부족하기 위해이 솔루션을 "DMV 방문"이라고 느슨하게 부를 것입니다.

매일 다른 새 차를 제공하는 자동차 대리점이 있으며, 며칠 동안 이국적인 스포츠카를 각각 $ 5 (제한 3)와 5 달러의 목적지 요금을 구입할 수 있다고 가정 해 봅시다.

캐치는, 대리점은 대리점을 방문하고 문을 통해 허용되기 전에 유효한 운전 면허증을 보여 주어야합니다. 또한 구매를 위해 유효한 운전 면허증을 말해야합니다.

따라서이 자동차 딜러의 첫 방문객 (Bob이라고 부르 자)은 입장을 거부하고 드라이버 라이센스를 얻기 위해 DMV 사무소 (옆에 편리하게 위치)에 회부됩니다.

운전 면허증을 보여준 후 유효한 운전 면허증이있는 다른 방문자가 허용됩니다. 하루 종일 배회하고, 세일즈맨을 괴롭 히고, 브로셔를 잡고, 무료 커피와 쿠키를 비우면서 자신의 성가신 사람은 결국 도망 갈 것입니다.

이제 라이센스없이 Bob으로 돌아 가기 - 그가해야 할 일은 DMV 방문을 한 번 견뎌내는 것입니다. 그 후, 그는 우연히 지갑을 집에 떠나지 않는 한, 그가 좋아할 때마다 대리점을 방문하고 자동차를 구입할 수 있습니다.

이 세상의 운전 면허증은 위조하기가 거의 불가능합니다.

DMV 방문에는 먼저 "시작"대기열에서 신청서를 얻는 것이 포함됩니다. Bob은 완성 된 신청서를 Window #1로 가져 가야합니다. 여기서 많은 공무원 중 첫 번째 공무원이 신청서를 처리하고 처리하며 모든 것이 순서대로 진행되면 창문 신청서를 찍고 다음 창으로 보내야합니다. 그래서 Bob은 Windows에서 창으로 이동하여 마침내 끝까지 가서 Drivere의 라이센스를받을 때까지 신청서의 각 단계가 진행되기를 기다리고 있습니다.

DMV를 "단락"하려고 할 필요는 없습니다. 양식이 3 중에서 올바르게 작성되지 않거나 어떤 창에 어떤 잘못된 답변이 표시되지 않으면, 응용 프로그램이 찢어지고 불쾌한 고객이 시작으로 다시 전송됩니다.

흥미롭게도, 사무실이 아무리 가득 차 있거나 비어 있더라도 각 연속 창에서 서비스를받는 데 거의 같은 시간이 걸립니다. 당신이 유일한 사람이라도, 직원은 "다음!"을 말하기 전에 노란색 선 뒤에서 잠시 기다리게하는 것을 좋아하는 것 같습니다.

그러나 DMV에서는 상황이 그리 끔찍하지 않습니다. 라이센스를 얻기위한 모든 대기 및 처리가 진행되는 동안 DMV 로비에있는 동안 자동차 대리점에 대한 매우 재미 있고 유익한 정보를 볼 수 있습니다. 실제로, 정보는 라이센스를받는 데 소비하는 시간을 충당하기에 충분히 길어집니다.

약간 더 기술적 인 설명 :

내가 맨 위에서 말했듯이, 인간을 봇과 분리시킬 수 있도록 클라이언트-서버 관계에 대한 상태가 필요합니다. 당신은 익명의 (인증되지 않은) 인간 방문자에 지나치게 처벌하지 않는 방식으로 그것을하고 싶습니다.

이 접근법은 아마도 Ajax-Y 클라이언트 측 처리가 필요할 것입니다. Woot의 브랜드 스팽킹 새로운 방문자에게 "환영 새로운 사용자!"가 제공됩니다. 페이지가 가득 찬 텍스트와 그래픽으로 가득 찬 (적절한 서버 측 스로틀) 완전히로드하는 데 몇 초가 걸립니다. 이런 일이 일어나고있는 동안 (그리고 방문자는 아마도 환영 페이지를 읽는 것 같습니다), 그의 식별 토큰이 천천히 조립되고 있습니다.

토론을 위해 토큰 (일명 "드라이버 라이센스)은 20 개의 청크로 구성됩니다. 각 연속 청크를 얻으려면 클라이언트 측 코드는 서버에 유효한 요청을 제출해야합니다. 서버는 고의적 인 지연을 통합합니다 (말하면하자면하자. 200 밀리 초), 다음 덩어리를 보내기 전에 다음 청크 요청을하는 데 필요한 'Stamp'(즉, 하나의 DMV 창에서 다음 DMV 창에서 다음으로 이동하는 데 필요한 스탬프)를 보내기 전에 약 4 초가 엘랩을 켜야합니다. 청크-상실-반응-청크-갈등-반응 --..

이 프로세스가 끝나면 방문자는 토큰이있어 제품 설명 페이지로 이동하여 구매 페이지로 이동합니다. 토큰은 각 방문자에게 고유 한 ID이며 그의 활동을 스로틀하는 데 사용될 수 있습니다.

서버 측에서 유효한 토큰이있는 클라이언트의 페이지보기 만 허용합니다. 또는 모든 사람이 궁극적으로 페이지를 볼 수있는 것이 중요하다면 유효한 토큰이없는 요청에 시간 페널티를 넣으십시오.

이제 이것이 합법적 인 인간 방문자에게 상대적으로 양성이되기 위해서는 토큰 발행 과정이 배경에서 비교적 비 무질서하게 발생합니다. 따라서 의도적으로 약간 느려지는 재미있는 사본과 그래픽이있는 환영 페이지가 필요합니다.

이 접근법은 봇의 스로틀 다운이 기존 토큰을 사용하거나 새 토큰을 얻기 위해 최소 설정 시간을 가져 가도록 강요합니다. 물론 이것은 가짜 방문자의 분산 네트워크를 사용하여 정교한 공격에 반대하는 데 도움이되지 않습니다.

보안관으로도 봇을 완전히 방지 할 수는 없습니다. 그러나 봇을 쓰고 유지 관리하여 숫자를 줄이는 데 고통을 줄 수 있습니다. 특히 매일 봇을 업데이트하도록 강요함으로써 대부분의 관심을 잃게 될 것입니다.

다음은 봇을 쓰기가 더 어렵다는 아이디어가 있습니다.

  • JavaScript 기능을 실행해야합니다. JavaScript는 봇을 쓰는 것이 훨씬 더 고통 스럽습니다. JavaScript를 실행하지 않으면 실제 비 JavaScript 사용자 (최소)를 허용하기 위해 보안 문자가 필요할 수 있습니다.

  • 양식으로 입력 할 때 키 스트로크를 시간에 (다시 JavaScript를 통해). 인간과 같지 않으면 거부하십시오. 봇에서 인간 타이핑을 모방하는 것은 고통입니다.

  • 새로운 임의의 값으로 필드 ID의 매일 업데이트하려면 코드를 작성하십시오. 이렇게하면 고통 인 봇을 매일 업데이트해야합니다.

  • 코드를 작성하여 매일 필드를 다시 주문하십시오 (분명히 사용자에게 무작위가 아닌 방식으로). 그들이 현장 주문에 의존하는 경우,이를 통해 매일 유지 보수를 강제로 봇 코드로 강제합니다.

  • 더 나아가 플래시 컨텐츠를 사용할 수 있습니다. 플래시는 봇을 쓰는 데 완전히 고통스러운 것입니다.

일반적으로 그들을 막지 못한 것에 대한 사고 방식을 취하기 시작하지만 더 많은 일을하게되면 원하는 목표를 달성 할 수 있습니다.

등록되지 않은 사용자를위한 모든 제품 공지 사항에 대해 5 분 지연됩니다. 캐주얼 사용자는 실제로이 사실을 알지 못하고 비 캐주얼 사용자는 어쨌든 등록 될 것입니다.

나는 당신이 들어오는 IPS를 확인할 때 주장하는 큰 부담을보고 있지 않습니다. 반대로, 나는 5 분마다 HTTP 액세스 로그를 분석하는 고객 중 하나를위한 프로젝트를 수행했습니다 (실시간 일 수도 있지만 어떤 이유로 든 완전히 이해하지 못했던 이유는 없었습니다). 주소가 합법적 인 검색 엔진 (Google, Yahoo 등)에 속하는 것으로 확인할 수없는 한 과도한 요청을 생성하는 모든 IP 주소에서 연결을 차단하기 위해 방화벽 규칙을 작성합니다.

이 클라이언트는 웹 호스팅 서비스를 실행하고 총 800-900 도메인을 처리하는 3 개의 서버 에서이 응용 프로그램을 실행하고 있습니다. 피크 활동은 초당 천 타격 범위에 있으며 성능 문제는 없었습니다. 방화벽은 블랙리스트 주소에서 패킷을 떨어 뜨리는 데 매우 효율적입니다.

그렇습니다. DDOS 기술은 분명히이 계획을 물리 칠 수 있지만 실제 세계에서는 그런 일이 일어나지 않습니다. 반대로, 그는 서버의 부하가 크게 줄어들고 있다고 말합니다.

저의 접근 방식은 비 기술적 솔루션에 집중하는 것입니다 (그렇지 않으면 잃어버린 무기 경쟁에 들어가거나 적어도 많은 시간과 돈을 소비합니다). 청구/배송 부품에 중점을 둡니다. 동일한 주소로 여러 배송을 찾거나 단일 결제 방법에 대한 여러 충전으로 봇을 찾을 수 있습니다. 몇 주에 걸쳐 항목에 걸쳐이 작업을 수행 할 수도 있으므로 사용자가 이전 항목을 얻었다면 (정말로 빨리 응답하여) 이번에는 일종의 "핸디캡"이 할당 될 수 있습니다.

이것은 또한 부작용 (유익하지만 생각하지만, 당신의 경우에는 마케팅이 잘못 될 수 있음)를 가질 것입니다.

대부분의 순수 기술 솔루션이 이미 제공되었습니다.그러므로 나는 문제에 대한 또 다른 견해를 제안하겠습니다.

내가 이해하는 바에 따르면, 봇은 사람들에 의해 설정됩니다. 진심으로 당신이 판매하는 가방을 사려고 합니다.문제는 -

  1. 봇을 운영하지 않는 다른 사람들도 구매할 기회가 있고 한정된 수량의 가방을 제공하고 있습니다.
  2. 귀하는 귀하의 사이트로 사람들을 끌어들이고 가방만 판매하기를 원합니다.

봇을 피하려고 하는 대신 잠재적인 가방 구매자가 이메일을 구독하거나 SMS 업데이트를 구독하여 판매가 발생할 때 알림을 받을 수 있도록 할 수 있습니다.1~2분 정도 먼저 시작할 수도 있습니다(판매가 시작되고 무작위로 생성되어 메일/SMS와 함께 전송되는 특수 URL).

구매자가 구매하러 갈 때 귀하의 사이트에 있으면 사이드 배너 등을 통해 원하는 것을 보여줄 수 있습니다.봇을 실행하는 사람들은 단순히 알림 서비스에 등록하는 것을 선호할 것입니다.

봇 실행자는 구매를 더 빨리 완료하기 위해 알림에 따라 봇을 계속 실행할 수도 있습니다.이에 대한 일부 솔루션은 원클릭 구매를 제공하는 것입니다.

그런데, 귀하의 사용자가 등록되지 않았다고 말씀하셨는데, 이 가방을 구매하는 사람들은 무작위 구매자가 아니라 이러한 판매를 기대하는 사람들인 것 같습니다.따라서 그들은 가방을 "승리"하려는 시도에서 이점을 얻기 위해 기꺼이 등록할 수도 있습니다.

본질적으로 제가 제안하는 것은 문제를 기술적 문제가 아닌 사회적 문제로 보도록 노력하라는 것입니다.

아사프

분당 너무 많은 요청을하는 타임 블록 사용자 에이전트. 예를 들어 누군가가 5 초마다 10 분마다 페이지를 요청하는 사람이 있다면 아마도 사용자가 아닐 수도 있습니다 ... 그러나이 권리를 얻는 것은 까다로울 수 있습니다.

그들이 경고를 트리거하는 경우, 모든 요청을 x 분 안에 다시 허용 될 것이라는 메시지를 전달하면서 가능한 한 작은 DB-IO를 사용하여 모든 요청을 정적 페이지로 리디렉션하십시오.

페이지 요청에 따라이를 적용하고 미디어 (JS, 이미지 등)에 대한 모든 요청을 무시해야한다고 덧붙여 야합니다.

DOS를 방지하는 것은 위에서 설명한 @Davebug의 목표 중 2 위를 물리 칠 것입니다.

나는 대본이 인간이 주문 양식을 통과 할 수있는 것보다 여전히 더 빠른 과도한 한계 아래에서 스케이트를 타기 위해 무언가를 쓸 수 있다고 확신합니다.

스패머들이 "쓰레기의 멍청한"경매에서 우승하기 위해 경쟁하는 일반 사람들과 경쟁하고 있으십니까? 다음 경매를 문자 그대로 "쓰레기의 가방"으로 만들지 않겠습니까? 스패머는 강아지로 가득 찬 가방에 좋은 돈을 지불하게됩니다. 그리고 우리 모두는 그들을 비웃습니다.

여기서 중요한 것은 서버에서 부하를 제거하기 위해 시스템을 변경하거나 봇이 게임을하고 있다는 사실을 알리지 않고 봇이 쓰레기 백에서 승리하는 것을 방지하는 것입니다. 나는 당신의 끝에 약간의 처리 없이이 작업을 수행 할 수있는 방법이 없다고 생각합니다.

그래서 당신은 당신의 홈페이지에서 히트를 녹음합니다. 누군가가 페이지를 쳤을 때마다 연결이 마지막 히트와 비교되고 너무 빠르면 제안없이 페이지의 버전을 전송합니다. 이것은 봇 (너무 빠른 히트)을 홈페이지의 캐시 버전을 제공하는 서버로 봇을 보내는 일종의로드 밸런싱 메커니즘으로 수행 할 수 있습니다. 실제 사람들은 좋은 서버로 보내집니다. 이것은 기본 서버에서로드를 빼앗아 봇이 여전히 페이지를 올바르게 제공하고 있다고 생각하게 만듭니다.

제안이 어떤 식 으로든 거부 될 수 있다면 더 좋습니다. 그런 다음 Faux Server에서 제안을 할 수 있지만 봇이 "죄송합니다. 충분히 빠르지 않았습니다"라고 말하는 양식을 작성하면 여전히 게임에 있다고 생각할 것입니다.

주문을 하는 스크립터가 있는지 어떻게 알 수 있나요?

문제의 핵심은 합법적인 사용자로부터 스크립터를 분리할 수 없고 따라서 그들을 차단할 수도 없다는 것인데, 스크립터가 있다는 것을 어떻게 알 수 있습니까?

이 질문에 답할 수 있는 방법이 있다면 스크립터를 필터링하는 데 사용할 수 있는 일련의 특성이 있는 것입니다.

문제를 머리에 돌리자 - 당신은 당신이 진짜 사람들을 사기를 원하는 물건을 구매하는 봇이 있습니다. ~하지 않다 실제 사람들이 사기를 원합니다.

스크래핑 봇이 실제 상황이라고 생각할 수없는 일부 비 표시 HTML에 대한 임의의 기회가 있지만 실제 사람들은 볼 수 없으며 실제 사람들이 맹인을 포함한다는 것을 잊지 말고 스크린 리더 등을 고려하십시오). 이것은 엄청나게 비싼 물건을 구매하기 위해 여행합니다 (또는 실제 구매를하지는 않지만 금지 목록을 입을 수있는 지불 세부 정보를 얻습니다).

봇이 '구매'대신 '사용자 경고'로 전환 되더라도 충분한 오 탐지를 얻을 수 있다면 사람들에게 충분히 가치가 없게 만들 수 있습니다 (아마도 모든 사람은 아니지만 사기의 일부 감소는 아무도없는 것보다 낫다) 귀찮게하지 않는다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top