스크립터가 웹 사이트를 우회하는 것을 방지


489

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

상태

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

유용성은 내 직업의 큰 부분이며 사이트를 흥미롭고 재미있게 만드는 것이 나머지 부분입니다. 바로 아래 세 가지 목표가 도출 된 것입니다. 보안 문자는 사용성에 해를 끼치며 봇은 쓰레기 판매에서 즐거움과 흥분을 훔칩니다.

봇은 랜덤 크랩 판매를 위해 두 번째 화면 스크래핑 (및 RSS 스캔)을 앞 페이지 수십 번 밟고 있습니다. 그들이 보는 순간, 그것은 로그인하고, 내가 원하는 것을 클릭하고, 양식을 작성하고, 쓰레기를 사는 프로그램의 두 번째 단계를 촉발시킵니다.

평가

lc :이 방법을 사용하는 스택 오버플로 및 기타 사이트에서는 인증 된 (로그인 된) 사용자를 거의 항상 처리합니다.

Woot에서 익명 (로그되지 않은) 사용자는 우리 홈페이지를 볼 수 있습니다. 다시 말해, 슬래 밍 봇은 인증되지 않을 수 있습니다 (IP 주소를 제외하고 본질적으로 추적 할 수 없음).

따라서 우리는 IP 검색을 다시 시작합니다 .a)이 시대의 클라우드 네트워킹 및 스팸봇 좀비에서는 상당히 쓸모가 없습니다. 비 정적 IP ISP 및이를 추적하려는 잠재적 인 성능 저하).

아, 사람들이 우리를 불러주는 것이 최악의 시나리오 일 것입니다. 전화 할 수 있습니까?

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

 

lc 다시 : "물론, 과대 광고는 마케팅 계획의 일부가 아닙니다." 그렇습니다. 아이템이 나타날 때의 놀라움과 아이템을 얻는 데 대한 흥분은 실제로 얻는 쓰레기보다 훨씬 중요합니다. 선착순을 제거하는 것은 쓰레기를 '승리'하는 스릴에 해 롭습니다.

 

노바 트러스트 : 저는 새로운 봇 대 군주를 환영합니다. 당사는 실제로 타사 앱이 사이트에서 제품 정보를 검색 할 수 있도록 RSSfeed를 제공하지만 기본 사이트 HTML보다 앞서 있지는 않습니다. 내가 올바르게 해석하면 솔루션 1은 목표 1을 완전히 희생하고 봇이 대부분의 쓰레기를 구입할 것이라는 사실을 사임함으로써 목표 2 (성능 문제)를 돕습니다. 마지막 단락 비관이 나에게 정확하다고 느끼기 때문에 귀하의 답변을 투표했습니다. 여기에는 총알이없는 것 같습니다.

응답의 나머지 부분은 일반적으로 IP 추적에 의존하며, 다시는 쓸모없고 (봇넷 / 좀비 / 클라우드 네트워킹 사용) 해로운 것 (동일한 IP 대상에서 온 많은 무고한 사람들을 잡는 것)으로 보입니다.

다른 접근법 / 아이디어가 있습니까? 저의 개발자들은 계속해서 "보안 문자 만하자"고 말하지만 실제 인간이 우리 쓰레기를 원하는 데 방해가되지 않는 방법이 있기를 바랍니다.

원래 질문

인지도가 매우 높고 금액이 매우 저렴한 상품을 판매한다고 가정 해 보겠습니다. 이 상품을 언제 판매 할 것인지 정확히 아는 사람은 없습니다. 그리고 당신이 팔고있는 것을보기 위해 백만 명이 넘는 사람들이 정기적으로 방문합니다.

프로그래밍 방식으로 [a] 해당 항목을 판매 할시기를 파악하고 [b] 처음 구매 한 사람인지 확인하려는 스크립터 및 봇이 있습니다. 이것은 두 가지 이유로 짜증납니다.

  1. 귀하의 사이트는 사람이 아닌 사람으로 인해 다운되어 모든 사람이 모든 것을 느리게합니다.
  2. 스크립터는 결국 제품을 '승리'하여 일반인이 속이는 느낌을 갖습니다.

겉보기 명백한 해결책은 사용자가 주문하기 전에 뛰어 넘을 수있는 후프를 만드는 것이지만 적어도 3 가지 문제가 있습니다.

  • 사용자 경험은 사람들이 보안 문자를 해독하거나 고양이를 골라 내거나 수학 문제를 해결해야하기 때문에 짜증납니다.
  • 인식 된 이익이 충분히 높고 군중이 충분히 크면 일부 그룹은 조정을 통해 무기 경쟁으로 이어질 것입니다. (이것은 조정이 더 단순 할 때 특히 그렇습니다. 숨겨진 '설명'양식, 양식 요소 재 배열, 잘못 레이블 지정, 숨겨진 'gotcha'텍스트는 모두 한 번 작동 하며이 특정 양식을 타겟팅하기 위해 변경되어야합니다. .)
  • 스크립터가 조정을 '해결'할 수 없어도 스크립트가 첫 페이지를 때리는 것을 막지 못하고 스크립터가 수동으로 주문을 작성하는 경보를 울리지 않습니다. 그들이 [a]를 해결함으로써 이점을 얻는다면, 그들은 주문 페이지에 도달 한 최초의 인간이기 때문에 여전히 [b]를 이길 것입니다. 또한 1. 여전히 발생하여 서버 오류가 발생하고 모든 사람의 성능이 저하됩니다.

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

주문 양식을 일정 시간 (예 : 0.5 초) 동안 강제로로드하는 세 번째 아이디어는 빠른 주문의 진행 속도를 잠재적으로 느리게 할 수 있지만, 다시 한 번 스크립터는 실제 사용자.

목표

  1. 비 스크립팅 사람에게 상품을 판매하십시오.
  2. 봇에 의해 느려지지 않는 속도로 사이트를 운영하십시오.
  3. '일반적인'사용자가 사람임을 증명하기 위해 완료해야 할 작업을 번거롭게하지 마십시오.

1
나는 당신이 모순되는 목표를 가지고 있다고 생각합니다 : 경험을 그대로 유지하면서 봇을 제거하십시오. 나는 당신이 다른 하나를 희생하지 않으면 서 하나를 얻을 수 없다고 생각합니다.
최대

커뮤니티 위키이기 때문에 찌르지 말고 싶었지만, 이미 시도하고 할인을 시도한 것이 분명하다는 것을 고려할 때 최대한 모든 점을 명확하게 다루려고 노력했습니다.
Dave Rutledge

반복되는 위반자를 캐시하지 말고 반복해서 요청하는 페이지를 업데이트하지 마십시오. IPv4 및 MAC 주소는 총 32 + 48 비트입니다. 백만 명의 사용자에게 10MB는 문제가되지 않습니다. 조합은 IPv4 및 MAC는 더 정확하게 사용자의 모든 종류를 추적 할 수 있도록해야한다
존 Leidegren

4
익명의 사용자가 쓰레기 판매를 보게해야하는 이유를 잘 모르겠습니다. 로그인 한 사용자에게만 제공하지 않는 이유는 무엇입니까? 그렇게하면 알 수없는 사용자가 페이지를 너무 자주 방문하여 나쁜 사용자를 금지 할 수 있습니다.
Ryan Guill

1
일부 사람들에게는 여기서 핵심 요소가 누락 된 것 같습니다.이 봇은 로그인하여 구매하도록 설정되어 있습니다. 그들은 유효한 계정을 알고 로그인 할 수 있습니다. 또한, woot를 사용하는 실제 사람들은 아이템이 올라 오는 순간에 앉아서 5 초마다 다시로드하기 위해 F5를 누르십시오. 그것은 정상적인 정상적인 사용입니다.
CodingWithSpike

답변:


229

보안 문자로 SO와 같은 것을 구현하는 것은 어떻습니까?

사이트를 정상적으로 사용하는 경우 사이트를 보지 못할 것입니다. 동일한 페이지를 너무 자주 다시로드하거나, 연속적인 주석을 너무 빨리 게시하거나, 알람을 유발하는 다른 항목을 게시하면 사람임을 입증하십시오. 귀하의 경우, 이는 페이지의 모든 링크를 빠르게 따르거나 사람이 되기에는 너무 빠른 주문 양식을 채우는 동일한 페이지를 지속적으로 다시로드하는 것일 수 있습니다.

이들이 연속으로 x 번 확인에 실패한 경우 (예 : 2 또는 3) 해당 IP에 시간 초과 또는 기타 측정 값을 지정하십시오. 그런 다음 시간 종료가 끝나면 다시 수표로 덤프하십시오.


사이트에 액세스하는 등록되지 않은 사용자가 있으므로 계속 IP를 사용할 수 있습니다. 각 브라우저에 세션을 발행하고 원하는 경우 해당 방식으로 추적 할 수 있습니다. 물론, 봇이 쿠키를 계속 삭제하는 경우를 대비하여 너무 많은 세션이 연속적으로 다시 생성되면 사람 확인을 포기하십시오.

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

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


편집 : 또 다른 옵션은 제품이 너무 많이 실패하고 제품 수요에 대해 확신하고 제품을 차단하고 블록을 제거하도록 개인적으로 전화하도록하는 것입니다.

사람들이 전화를하는 것은 마치 소소한 조치처럼 보이지만 컴퓨터 뒤에 사람이 있는지 확인하십시오 . 핵심은 봇이 아닌 한 거의 일어나지 않아야하는 조건에 대해서만 블록을 배치하는 것입니다 (예 : 연속으로 여러 번 확인 실패). 그런 다음 인간의 상호 작용을 강요하여 전화를받습니다.

그들이 저를 부른다는 의견에 대한 응답으로 여기에 그 절충이 분명히 있습니다. 사용자가 판매시 몇 개의 전화를받을 수있는 사람이되도록 걱정 하는가? 제품이 사용자에게 제공되는 것에 대해 걱정이된다면이 결정을 내려야 할 것입니다. 아마도 프로세스에서 약간의 시간을 희생해야 할 것입니다.

봇이 귀하의 사이트를 우위에 두지 않도록 결정한 것 같습니다. 전화가 좋은 선택 일 수 있습니다. 귀하의 제품에서 이익을 얻지 않기 때문에 이러한 전화를받는 데 관심이 없습니다. 그러나 그 이익의 일부를 나누 셨지만 관심을 가질 수 있습니다. 이것이 귀하의 제품이므로 귀하는 그에 따라 얼마나 많은 관심과 구현을 결정해야합니다.


차단을 해제하는 다른 방법으로는 효과적이지 않습니다 : 타임 아웃 (그러나 헹굼 후 반복적으로 사이트를 슬램 핑해야 함), 긴 타임 아웃 (실제로 사람이 제품을 구매하려는 경우, 그들은 SOL이고 수표에 실패한 경우 처벌을 받음), 이메일 (봇이 쉽게 수행함), 팩스 (같은) 또는 달팽이 메일 (너무 오래 걸림).

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


13
Google은 이와 동일한 접근 방식을 사용하며 IP 주소 만 가지고 있습니다. 직장에서 자주 동일한 IP 주소에서 봇과 유사한 동작을 볼 수 있기 때문에 Google에서 검색하기 전에 보안 문자를받습니다. 나는이 접근법 (봇과 같은 행동 후의 캡차)이 최선이라고 생각합니다.
Ross

7
나는 구글이 전에 보안 문자를 요구했지만, 그것은 내 잘못이었다. 나는 그것들을 계산기로 사용하여 수십 개의 거의 동일한 합계를 수행했다.
Marcus Downing

보안 문자 옵션은 나에게 승자처럼 들립니다. 당신은 봇을 심하게 다치게하고 균형이 잘 잡히면 합법적 인 사용자에게 절대로 접근해서는 안됩니다.
xan

사람들을 차단하고 전화를 사용하는 대신 cur92Siva@site.com과 같은 임시 이메일 주소를 생성 할 수 있지만 이미지로 앞 부분을 생성 할 수 있습니다.
Sam

봇이 시스템에 익숙해지지 않고 전자 메일 주소를 스크린 스크랩 할 수 없다면 그것은 또한 효과가 있습니다. 전화 통화의 요점은 실제로 사람과의 상호 작용을 강제하고 사용자가 자신의 목소리로 직접 설명해야한다는 것입니다. 봇 소유자는 아마 그렇게하고 싶지 않을 것입니다.
lc.

193

봇이 12mm 윙 너트 : 20 달러에 비해 매우 비싼 물건을 구매할 수있는 방법을 찾아야합니다. 스크립트 작성자가 게임을 결정하기 전에 스냅 샷이 몇 개나되는지 확인하십시오.

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


12
상품을 반품하거나 지불 거절을하면 어떻게 되나요? 이로 인해 비용이 발생하고 지불 거절로 인해 신용 카드 프로세서로 인해 비즈니스가 손상 될 수 있습니다. 봇은 도난당한 카드를 사용하고있을 가능성이 높지만 더 많은 금액이 더 자주 도전을 받으면 지불 거절 수준을 악화시킬 수 있습니다.
Tai Squared

13
충전하지 말고 특히 봇으로 표시하십시오. 신체가 음란 한 물건을 사면 봇으로 표시하고 허용하지 마십시오. 아마 몇 시간 동안 잠글 수있을 것입니다.
Kibbee

4
이것은 당신이 단지 멍청이를 긁는 것보다 더 많은 기술을 가지고 있고, 당신이 그를 찢어 버렸기 때문에 실제 문제를 일으키는 스크립트-kiddie를 화나게 할 때까지 심각한 코미디 가치를 가지고 있습니다.
MattBelanger

2
스크립트 아동이 화를 내면 자신이 태그를 달고 법 집행 기관에 넘길 수있을 정도로 노출 될 수 있습니다.
Jacco 2012

9
sqook : 이것은 기술 솔루션이 아니라 실제 솔루션입니다. 총을 든 경비원을 은행에 넣는 것도 마찬가지입니다. 코가 딱딱 해 보일 수도 있지만 사기꾼도 마찬가지입니다. 그들이 멈출 때까지 아픈 곳을 다치십시오.
Christopher Mahan

162

내 솔루션은 '봇 및 스크립트에 약 10 분 지연을 두어 스크린 스크래핑을 무가치하게 만드는 것입니다.

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

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

적중마다 모든 IP 주소를 기록 할 필요는 없습니다. 20 번의 조회수 중 하나만 추적하십시오. 반복 위반자는 여전히 무작위 무작위 추적에 나타납니다.

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

  • 반복 타자 / 봇이 사이트에 도달하면 10 분 동안 캐시 된 페이지를 제공하십시오.

그들은 그들이 오래된 사이트를 얻는다는 것을 즉시 알지 못할 것입니다. "실제 사람들"은 10 분의 헤드 스타트를 갖기 때문에 더 이상 긁을 수는 없지만 더 이상 경주에서 이길 수는 없습니다.

혜택:

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

단점

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

어떻게 생각해?


1
젠장 방금 1 시간 반 동안 워트를위한 5 개의 벡터 체계를 작성했으며 5 번째 대책 (봇넷 스로틀)을 길고 열심히 생각한 후에 패배를 인정해야했습니다. 작동하지 않습니다. 그리고 한 시간 동안 지속되는 나머지 솔루션은이 솔루션입니다. abelenky, 내가 당신에게 내 모자 팁
옌스 롤랜드

7
이 위에 구축하려면 IP를 메모리 내 LRU 카운팅 해시에 넣습니다 (IP가 다시 올 때마다 증가 및 증가). 역방향 IP 정보, 활동, 이미지 / js / 쿠키 다운로드를 기반으로 휴리스틱을 추가합니다. 공격이 얼마나 나쁜지에 따라 대응을 조정하여 허위 부정의 결과를 최소화하십시오.
SquareCog

1
(계속 :) 그리고 내 기술은 아무도 셧아웃 / 금지하지 않습니다. 지연된 정보 만 제공합니다. 사무실의 어느 누구도 상을받을 수는 없지만 고객 서비스 / 접근성 관점에서 큰 문제는 아닙니다.
abelenky

18
@bruceatk : 당신이 그들에게 특별한 봇 전용 페이지를 주면, 그들은 결국 그것을 탐지하는 법을 배우고 일반 고객을 더 정확하게 스푸핑하는 법을 배웁니다. 이전 페이지를 제공하면 이전 데이터를 수신한다는 아이디어가 없습니다. 오래된 데이터는 합법적입니다! 컨테스트 / 레이스 목적으로는 쓸모가 없습니다.
abelenky 2012

1
내 아이디어를 옹호 한 사람들에게 감사합니다. 현상금이 끝났음에도 불구 하고이 아이디어는 보안 문자보다 구현하기 쉽고 인간을 희롱 할 가능성이 적으며 봇을 호일 가능성이 높다는 점에서 많은 장점이 있다고 생각합니다. 누군가가 이것을 웹 사이트에서 시도해 보길 바랍니다.
abelenky

54

한 번 봐 가지고 여기 네드 BATCHELDER으로이 기사를 . 그의 기사는 스팸봇 차단에 관한 것이지만 동일한 기술이 사이트에 쉽게 적용될 수 있습니다.

사람들이 자신을 식별하도록하여 봇을 중지시키는 대신, 성공적인 게시를 어렵게하거나 실수로 자신을 봇으로 식별하여 봇을 중지 할 수 있습니다. 이렇게하면 사람들의 부담이 사라지고 댓글 형식에 스팸 방지 조치가 표시되지 않습니다.

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

다른 아이디어들 :

  • 제품 판매시 사람들이 가입 할 수 있는 공식 자동 알림 메커니즘 (RSS 피드? Twitter?)을 만듭니다. 따라서 사람들이 스크립트를 작성 해야 할 필요성 이 줄어 듭니다 .
  • 새 품목이 판매 되기 직전에 난독 처리 기술을 변경하십시오 . 따라서 스크립터가 무기 경쟁을 확대 할 수 있더라도 항상 하루가 뒤쳐집니다.

편집 : 완전히 명확하게하기 위해 Ned의 위 기사는 주문을 제출하기 위해 BOT가 양식을 통과하지 못하게하여 품목의 자동 구매를 방지하는 방법을 설명합니다. 그의 기술은 봇이 홈 페이지를 스크래핑하여 밴 들러 당근 판매시기를 결정하는 데 유용하지 않습니다. 나는 그것이 실제로 가능한지 확실하지 않습니다.

네드의 전략의 효과에 대한 귀하의 의견과 관련하여 : 네, 그는 허니팟에 대해 이야기하지만, 이것이 그의 가장 강력한 전략이라고 생각하지 않습니다. SPINNER에 대한 그의 논의는 내가 그의 기사를 언급 한 최초의 이유입니다. 원래 게시물에서 더 명확하게하지 못했습니다.

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

  • 타임 스탬프,
  • 클라이언트의 IP 주소
  • 댓글이있는 블로그 항목의 항목 ID
  • 비밀.

WOOT.com에서이를 구현하는 방법은 다음과 같습니다.

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

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

그가 설명 다른 전략은하는 것입니다 변경 시간 (새로운 아이템 판매에 갈 때 다시 변경) 시간에서 허니 팟 기술을 :

  • CSS 클래스 (물론 무작위 화)를 사용하여 표시 할 필드 또는 포함 요소를 설정하십시오.
  • 페이지 배경과 동일하거나 매우 유사한 필드의 색상을 지정하십시오.
  • 위치를 사용하여 페이지의 보이는 영역에서 필드를 이동하십시오.
  • 포함 된 허니팟 필드를 표시하기에는 요소를 너무 작게 만드십시오.
  • 필드를 볼 수 있지만 위치를 사용하여 가리는 요소로 덮으십시오.
  • Javascript를 사용하여 이러한 변경 사항을 적용하려면 봇에 완전한 Javascript 엔진이 있어야합니다.
  • 허니팟은 다른 필드와 같이 표시된 채로 두십시오. 그러나 사람들에게 입력하지 마십시오.

전반적인 아이디어는 각각의 새로운 품목이 판매 될 때 양식 디자인을 변경하는 것입니다. 또는 LEAST에서 새로운 BOC가 판매 될 때 변경하십시오.

몇 번 / 월, 어느 것입니까?

이 답변을 수락하면 다음 답변 마감일을 알려주시겠습니까? :)


RSS의 경우 +1 합법적 인 사용자에게 보상을 제공하십시오.
Marcus Downing

RSS는 좋은 솔루션처럼 보이지만이 사이트에 의존하고 있다고 생각하는 광고 수익을 떨어 뜨릴 수 있습니까?
TM.

1
나는 "스피너"개념을 이해하지 못한다. 이것은 html 안에 배치되어 <form>제출시 전송 되는 추가 데이터 입니까? 봇도 쉽게 긁을 수 있기 때문입니다.
Ponkadoodle

44

Q : 스크립터가 사이트를 초당 수백 번 밟지 않도록하려면 어떻게해야합니까?
A : 그렇지 않습니다. 외부 에이전트가이 동작 을 막을 방법이 없습니다 .

방대한 기술을 사용하여 들어오는 요청을 분석하고 휴먼이 누구인지 아닌지를 결정적으로 시도 할 수 있지만 실패 할 것입니다. 결국, 즉시가 아니라면.

유일하게 가능한 장기적인 해결책은 사이트가 봇 친화적이지 않거나 스크립터에게 덜 매력적 이도록 게임변경하는 것입니다.

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

...

좋아, 일부 옵션은 위에 주어졌고 거부되었습니다. 사이트를 한 번만보고 친숙하게 사이트에 익숙하지는 않지만 사람들이 이미지에서 텍스트를 읽을 수 있고 봇이이를 쉽게 수행 할 수 없으므로 공지를 이미지로 변경하십시오. 보안 문자 가 아닌 이미지-

  • 페이지가 요청 될 때 이미지를 생성합니다 (물론 캐시 됨)
  • 이미지 소스 이름을 동일하게 유지하면 게임이 중단되지 않습니다.
  • 대부분의 경우 이미지에 일반 텍스트가 포함되며 인라인 HTML 페이지의 일부로 표시되도록 정렬됩니다
  • 게임이 '켜짐'이면 이미지가 알림 텍스트로 바뀝니다.
  • 공지 사항 텍스트는 상품을 획득하기 위해 수동으로 입력해야하는 URL 및 / 또는 코드 나타냅니다 . 원하는 경우 코드를 보안 문자로 표시하지만 필요하지는 않습니다.
  • 추가 보안을 위해 코드는 요청 / IP / 에이전트를 위해 특별히 생성 된 일회성 토큰 일 수 있으므로 반복 된 요청이 다른 코드를 생성 할 수 있습니다. 또는 주문형 생성에 너무 많은 세금이 부과되는 경우 임의의 코드 (일회용 패드)를 미리 생성 할 수 있습니다.

이에 응답하는 실제 사람들의 타임 트라이얼을 실행하고이 시간의 절반보다 빠른 응답을 무시합니다 ( '죄송합니다, 오류가 발생했습니다. 죄송합니다. 다시 시도하십시오'). 이 이벤트는 또한 최소한 하나의 봇이 코드 / 게임을 파악했음을 개발자에게 알리기 때문에 코드 / 게임을 변경해야합니다.

봇이 게임을 시작하지 않아도 스크립터의 시간을 낭비하기 위해 게임을 주기적으로 계속 변경하십시오. 결국 스크립터는 게임에 질려서 다른 곳으로 가야합니다 ... 우리는 ;-) 희망합니다

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

편집 : 이미지 사용 외에도 다른 옵션은 구매 / 구매하지 않는 텍스트를 채우기 위해 자바 스크립트를 사용하는 것입니다. 봇은 자바 스크립트를 거의 해석하지 않으므로 보지 못합니다.


1
"기본 텍스트"도 변경되도록해야합니다. 이렇게하면 스크래핑 앱이 이미지를 이전 이미지와 비교하고 큰 변화를 기다리는 것을 막을 수 있습니다. +1. 좋은 생각이야
Frank Krueger

1
"최종 제안"수정 : 동일한 주소의 이전 요청이 보류중인 동안 주소에서 두 번째 요청이 들어 오면 첫 번째 요청을 버리고 두 번째 요청을 큐에 넣습니다. 이는 페이지를로드하지 않고 사이트를 망치는 데 대한 처벌로 작용합니다.
Dave Sherohman

@ [프랭크 크루거 (Frank Krueger)] : 나는 이것을 암시한다고 생각했지만, 다시 읽었을 때 나는 그렇지 않았다고 생각한다-지적 해 주셔서 감사합니다! 기본 텍스트 이미지를 몇 픽셀 만 변경하여 비교를 망칠 수 있고 / 또는 거의 보이지 않는 워터 마크 스타일 텍스트를 생성하여 봇을 더 혼란스럽게 만들 수도 있습니다.
Steven A. Lowe

@ [Dave Sherohman] : 가능하지만 대기열이 떨릴 수 있습니다. 새로운 요청을 버리고 즉시로드를 흘리는 것이 좋습니다. 테스팅 / 프로파일 링은 어떤 것이 더 나은지 알 수 있지만 좋은 제안에 감사드립니다!
Steven A. Lowe

당신이 그에게 기본적으로 주겠다고 말한 것을 참을 수는 없지만, 불가능하다고 생각하지만 나는 동의하지 않습니다. 의지가 있다면 항상 확실한 방법이 있습니다. 너무 쉽게 패배를 허용하는 것은 실제로 영감을받지 못하고 슬프다 .Orig 포스터가 읽는다면 가능하지만 트래픽 로그를 분석 한 후에 솔루션을 맞춤 설계해야합니다. 현재 방법을 방지하고 아직 예방할 수있는 미래의 증거 사용하지 않는 방법. 또한 자바 스크립트에서도 웹 브라우저 컨트롤은 실시간으로 자바 스크립트를 실행하며 다른 엔진이 필요하지 않습니다. Dom을 엉망으로 만들고 자신의 자바 스크립트를 실행할 수 있습니다! Opps
Erx_VB.NExT.Coder

30

이것이 얼마나 실현 가능한지 모르겠습니다. ... 공세를 계속하십시오.

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

또 다른 아이디어는 백오 랩 판매 기간 동안 임의의 가격 인하를 구현하는 것입니다. 당신이 $ 20의 가치가 있다고 명확하게 말할 때 누가 150 달러에 무작위 가방 쓰레기를 사겠습니까? 지나친 로봇 외에는 아무도 없습니다. 하지만 9 분 후에는 35 달러가되고 17 분 후에는 9 달러가됩니다. 또는 무엇이든.

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

이 모든 것은 당신이 100 % 바람직하지 않을 수도있는 봇 군주를 화나게하고 싶다고 가정합니다.


봇 군주를 화내는 것이 바람직하다고 생각하지는 않지만 흥미로운 아이디어가 있습니다.
Shawn Miller

7
동의합니다. 그리고 봇을 가짜 구매로 속이는이 반복되는 아이디어를 좋아합니다. 회수가 가능하며 이미 ToS를 위반하고 있기 때문에 불만을 제기 할 수 없습니다.
Nicholas Flynt

22

따라서 문제는 실제로 봇이 낮은 가격으로 높은인지 가치를 가지기 때문에 "가방"을 원한다는 것입니다. 당신은 때때로이 아이템을 제공하고 봇들이 숨어있을 때까지 기다렸다가 그들이 구매할 수 있는지 기다립니다.

봇 소유자가 이익을내는 것 (또는 잠재적으로 이익을내는 것)처럼 보이는 것은 속임수 를 사 도록 장려함으로써 이를 비영리적으로 만드는 것입니다.

먼저, 항상 "가방"을 제공하십시오.

둘째, 쓰레기가 보통 쓰레기인지 확인하십시오.

셋째, 쓰레기를 자주 돌리십시오.

간단 하지요?

당신은 영구적 인 "왜 우리 쓰레기는 왜 쓰레기입니까?" 제안 옆에 링크하여 진행중인 작업을 인간에게 설명합니다.

봇이 쓰레기를 발견하고 쓰레기가 자동으로 구매되는 것을 보았을 때, 수령인은 부러진 이쑤시개에 대해 10 달러를 지불 한 것에 대해 몹시 화를 낼 것입니다. 그런 다음 빈 쓰레기 봉투. 그런 다음 신발 바닥에 먼지가 묻어 있습니다.

그들이 비교적 짧은 기간 내에이 쓰레기를 충분히 사면 (그리고 당신이 왜 이런 일을하는지 설명하는 곳마다 큰 면책 조항이있는 경우) " 쓰레기 '오 쓰레기'. 쓰레기를 자주 회전 시키면 쓰레기를 긁지 않는지 확인하는 사람의 개입조차도 실패 할 수 있습니다. 봇은 아마도 너무 짧은 시간 동안 회전에 있었던 것을 알아 차리고 사지 않을 것입니다.

그렇습니다. 일반 고객이 너무 즐거워서 이것을 큰 마케팅 승리로 바꿀 수 있습니다. 잉어 잉어가 얼마만큼 팔리고 있는지 게시하십시오. 사람들은 봇이 얼마나 물린 것을 보려고 돌아올 것입니다.

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


15
  1. 비 스크립팅 사람에게 상품을 판매하십시오.

  2. 봇에 의해 느려지지 않는 속도로 사이트를 운영하십시오.

  3. '일반적인'사용자가 사람임을 증명하기 위해 완료해야 할 작업을 번거롭게하지 마십시오.

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

인터넷에서 아무도 당신이 개라는 것을 모른다

글쎄, 아무도 당신이 봇인지 모른다. 사람이 무언가를 요구하지 않고 연결의 다른 쪽 끝에 사람이 있는지 여부를 알 수있는 프로그래밍 방법은 없습니다. 스크립트 / 봇이 웹에서 작업을 수행하지 못하도록하는 이유는 보안 문자가 발명 된 이유입니다. 이것은 많은 노력을 기울이지 않은 새로운 문제가 아닙니다. 더 좋은 방법이 있다면, 보안 문자처럼 실제 사용자에게 번거롭지 않은 방법이 있다면 모두가 이미 사용하고있을 것입니다.

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


그들이 원하는 경우 +1, 보안 문자는 그들을 막을 수 없습니다 ... 그리고 만화.
Martin

13

Woot 가이 문제를 해결하기 위해 사용하는 방법은 게임을 바꾸는 것입니다. 그들이 매우 바람직한 판매 품목을 제시 할 때, 사용자는 주문하기 위해 비디오 게임을한다.

봇과 성공적으로 싸우는 것 (자동 플레이어를 피하거나 매 판매마다 새로운 게임을 제공하기 위해 게임을 약간만 변경할 수 있음)뿐만 아니라 사용자가 원하는 아이템을 "이기는"인상을 둔화시킵니다 주문 프로세스.

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


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

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

이 모든 전술을 구현한다고 가정 해 봅시다. 이것이 중요하다고 결정하면 100 명의 사람들이 나와 함께 일하게되며 100 대의 개별 컴퓨터에서 작동하는 소프트웨어를 구축하고 초당 20 회 (각 사용자 / 액세스 당 5 초) 사이트를 방문하게됩니다. 쿠키 / 계정 / IP 주소).

두 단계가 있습니다 :

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

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

그래서 제 작은 그룹이 함께 시간을 정하여 초당 약 20 개의 수표를 얻습니다. 변경 사항을 처음 본 사람은 먼저 다른 모든 사람에게 (자동으로) 경고합니다. 보안 문자를 구현하고 모든 wootoff / boc에 대해 변경하지 않는 한 자동으로 발생할 수도 있습니다).

# 2 앞에 보안 문자를 넣을 수 있으며, 봇이 첫 페이지를 보더라도 실제 사용자가 제품을 얻는 지 확인할 수있는 유일한 방법 일 수 있습니다.

그러나 보안 문자를 사용하더라도 100의 내 작은 밴드는 여전히 중요한 첫 발동기 이점을 가질 것입니다. 우리가 인간이 아니라고 말할 방법이 없습니다. 액세스 타이밍을 시작하면 지터가 추가됩니다. 어떤 컴퓨터를 새로 고칠 지 무작위로 선택할 수 있으므로 액세스 순서가 지속적으로 변경되지만 여전히 인간처럼 보입니다.

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

요청을 감시 할 누군가에게 명백한 어리석은 일을하고 있다면 같은 IP에서 1 초에 두 번 이상 새로 고침을하고 속도를 늦추기위한 전술을 사용하십시오 (패킷 삭제, 거부 또는 500 오류 등). ).

이렇게하면 트래픽이 크게 줄어들고 봇 사용자가 사용하는 전술이 변경됩니다.

둘째, 서버가 엄청나게 빠릅니다.

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

나는 당신이 필요로하는 것은 처음부터 완전히 맞춤형 솔루션이라고 생각합니다.

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

Apache, lighthttpd 등은 모두 융통성이 뛰어나지 만 단일 목적의 웹 사이트를 운영하고 있으며 현재 서버가 수행 할 수있는 것 (트래픽을 처리하고 봇과 적절히 싸우는 것)보다 더 많은 작업을 수행 할 수 있어야합니다. ).

사용자 정의 서버에서 매우 정적 인 웹 페이지 (30 초마다 업데이트)를 제공함으로써 요청 및 트래픽 수의 10 배를 처리 할 수 ​​없어야합니다. 페이지를 메모리에서 TCP / IP 버퍼로)하지만 봇 속도를 늦출 수있는 메트릭에 액세스 할 수도 있습니다. 예를 들어, IP 주소를 상관 시키면 IP 당 초당 둘 이상의 연결을 간단히 차단할 수 있습니다. 인간은 그보다 더 빨리 갈 수 없으며 동일한 NAT IP 주소를 사용하는 사람들조차도 드물게 차단됩니다. 느린 차단을 원할 것입니다. 공식적으로 세션을 종료하기 전에 연결을 1 초 동안 그대로 두십시오. 이는 특히 심각한 범죄자에게 장기 차단을 제공하기 위해 방화벽에 공급할 수 있습니다.

그러나 현실은 당신이 무엇을 하든지, 봇이 단일 목적을 위해 인간에 의해 맞춤형으로 만들어 졌을 때 봇과는 별도로 인간에게 말할 방법이 없다는 것입니다. 봇은 인간을위한 대리자 일뿐입니다.

결론

하루가 끝나면 사람과 컴퓨터에게 첫 페이지를 보도록 구별 할 수 없습니다. 주문 단계에서 봇을 중지 할 수 있지만, 봇 사용자에게는 여전히 첫 번째 발동기 이점이 있으며 여전히 관리해야 할 부담이 큽니다.

간단한 봇에 블록을 추가하면 막대가 늘어나고 방해가되는 사람이 줄어 듭니다. 충분할 것입니다.

그러나 기본 모델을 변경하지 않으면 운이 나빠집니다. 당신이 할 수있는 최선의 방법은 간단한 사례를 처리하고, 서버를 너무 빨리 일반 사용자에게 알리지 못하게하고, 수백만의 봇이 있더라도 원하는만큼 많은 일반 사용자가 얻을 수있는 많은 항목을 판매하는 것입니다 .

허니팟을 설정하고 사용자 계정을 봇 사용자로 표시하는 것을 고려할 수 있지만 커뮤니티에 큰 역효과가 있습니다.

"잘, 이것에 대해 어떻게 생각합니까?"를 생각할 때마다 항상 적절한 봇 전략으로 대응할 수 있습니다.

프론트 페이지를 주문 페이지로 가져 오기 위해 보안 문자로 설정하더라도 ( "이 상품의 주문 버튼은 파란색으로 반짝임,이 페이지 어딘가에 있습니다") 봇은 단순히 페이지의 모든 링크를 열고 그 중 하나를 사용합니다. 주문 페이지로 돌아갑니다. 이 방법으로는 이길 수 없습니다.

서버를 빠르게 만들고 주문 페이지에서 reCaptcha (내가 쉽게 바보로 만들 수는 없지만 응용 프로그램에 너무 느릴 수 있음)를 넣고 모델을 약간 변경하는 방법에 대해 생각하십시오. 일반 사용자는 봇 사용자만큼 좋은 기회를가집니다.

-아담


"언제나"잘, 이것에 대해 무엇을 할까 ... "라고 생각할 때마다 항상 적절한 봇 전략으로 대응할 수 있습니다"인증 시스템을 설계 할 때도 같은 결론에 도달했습니다. 그러나 여기에는 한 가지 차이점이 있습니다. 거짓 양성은 큰 문제가되지 않습니다 : 내가 그 논리를 의심하게
옌스 롤랜드

(계속) 예를 들어 여기에 몇 명의 실제 사용자가 있고 특별 혜택을받을 수없는 경우, 실제로 무엇을 놓치고 있는지 모르는 한 실제로 큰 문제는 아닙니다. 인증 시스템에서는 입니다 dealbreaker - 당신은 사용자가 로깅 방지하고 싶지 않아
옌스 롤랜드

(계속) 이것이 의미하는 바, 당신은 '전통적인'스팸봇 대책보다 더 제한적으로 Woot 시스템을 설계 할 수 있으며, 이로 인해 실제로 봇을 효과적으로 방해 할 수 있습니다.
Jens Roland

(그러나 이제는 더 많은 생각을했기 때문에 배포 방법 / 봇넷 '공격'을 막을 수있는 방법을 생각할 수 없습니다)
Jens Roland

11

면책 조항 :이 답변은 프로그래밍과 관련이 없습니다. 그러나 먼저 스크립트의 이유를 공격하려고 시도합니다.

또 다른 아이디어는 판매 할 수량이 한정되어 있다면 선착순으로 바꾸지 않겠습니까? 물론, 과대 광고는 마케팅 계획의 일부입니다.

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

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

  • 추첨 시스템 (주문을 시도하는 모든 사람이 시스템에 입력 됨)-스크립트를 사용하는 사람은 그렇지 않은 사람과 동일한 기회를 갖습니다.

  • 급한 우선 순위 대기열-진정으로 높은 가치가 있다면 사람들은 더 많은 돈을 기꺼이 지불 할 것입니다. 주문 대기열을 구현하지만 사람들이 대기열에 더 많은 비용을 지불하도록 허용하십시오.

  • 경매 (신용은 David Schmitt에게갑니다, 의견은 저 자신의 것입니다)-사람들은 여전히 ​​스크립트를 사용하여 마지막 순간에 도청 할 수 있지만 가격 책정 구조를 변경 할뿐만 아니라 사람들은 다른 사람들과 싸우기를 기대합니다. . 특정 기간 동안 입찰 수를 제한하고 승인 코드를 미리 사람들에게 전화하도록하는 작업도 수행 할 수 있습니다.


1
감사합니다. 다른 사람들이 있다는 것을 알았습니다.
lc.

모든 추첨 시스템은 봇의 호의의 가능성을 높이기 위해 오버로드 될 것입니다.
Andy Dent

개인 / 가구 / 물리 주소 당 1 개로 제한하지 않는 경우
lc.

11

나치의 의사 소통이 얼마나 안전하다고 생각하더라도, 동맹국들은 종종 메시지를 깨뜨릴 수있었습니다. 봇이 귀하의 사이트를 사용하지 못하게하려고 시도하더라도 봇 소유자는 그에 대한 해결책을 찾게됩니다. 그것이 당신에게 나치가되면 미안합니다 :-)

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

  • 봇이 사이트를 사용하지 못하도록 시도하지 마십시오
  • 즉시 작동하는 수정 프로그램을 사용하지 말고 긴 게임을하십시오.

사이트의 클라이언트가 사람인지 봇인지 상관없이 모두 고객에게 돈을 지불하는 것이 중요하다는 생각을 가지십시오. 그러나 하나는 다른 것에 비해 불공평 한 이점이 있습니다. 소셜 생활이 많은 일부 사용자 (암자)는 사이트의 다른 사용자에게 봇만큼 성 가실 수 있습니다.

오퍼를 게시 한 시간과 계정에서 오퍼를 구매하기로 선택한 시간을 기록하십시오.

이를 통해 고객이 물건을 얼마나 빨리 구매하는지 기록 할 수 있습니다.

오퍼를 게시하는 시간에 따라 다릅니다.

예를 들어, 하루 중 어둡지 않은 시간 (자정? 기본 시간을 변경하지 않고 창의 크기 만 변경하십시오.

시간이 지남에 사진이 나타납니다.

01 : 제품이 출시 된 후 몇 초 안에 어떤 계정이 정기적으로 제품을 구매하는지 확인할 수 있습니다. 그들이 봇일지도 모른다고 제안합니다.

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

이제 봇이 사이트를 사용하지 못하게하는 대신 봇이 확실히 어떤 계정을 사용하는지, 그리고 은자가 사용할 계정을 알려주는 충분한 정보가 있습니다. 이 정보를 사용하여 수행하는 작업은 전적으로 귀하의 책임이지만, 정보를 사용하여 평생 동안 사람들을 더 공정하게 만들 수 있습니다.

봇 계정을 금지하는 것은 의미가 없다고 생각합니다. 히틀러에게 전화를 걸고 "U- 보트의 위치에 감사드립니다!"라고 말하는 것과 비슷할 것입니다. 어쨌든 계정 소유자가 인식하지 못하는 방식으로 정보를 사용해야합니다. 내가 꿈꾸는 것이 있는지 보자 .....

대기열에서 주문 처리 :

고객이 주문을하면 즉시 주문이 대기열에 배치되고 처리되면 알림을받을 것이라는 확인 이메일을받습니다. 나는 아마존에서 주문 / 발송으로 이런 종류의 일을 경험하고 전혀 귀찮게하지 않습니다. 나중에 이메일을 받자 마자 주문이 발송되었다는 이메일은 나중에 며칠 동안 신경 쓰지 않습니다. 아마존은 내가 책을 원한다는 것을 알고있다. 귀하의 경우에 대한 이메일입니다

  1. 주문이 완료되었으며 대기열에 있습니다.
  2. 주문이 처리되었습니다.
  3. 주문이 발송되었습니다.

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


그게 무슨 뜻이야? :-)
Peter Morris

아 감사합니다 :-) 나는 Bletchley 공원에 대한 2 차 세계 대전 이야기에 매우 관심이 있기 때문에 나치의 언급 :-) 메시지가 어떻게 부서 지는지에 대한 이야기 ​​중 일부는 운영자가 너무 게으르다 고 가정하는 것처럼 문제에 대한 다른 정신적 접근 방식을 사용했습니다. 전날 밤 코드 :-)
피터 모리스

10

API를 사용하여 가격 정보를 공개한다고 말합니다. 이것은 직관적이지 않은 솔루션이지만 상황을 제어 할 수 있습니다. 웹 사이트보다 기능이 약간 떨어지도록 API에 몇 가지 제한 사항을 추가하십시오.

주문도 똑같이 할 수 있습니다. 원하는 효과를 얻을 때까지 API 기능 / 성능을 약간 변경하여 실험 할 수 있습니다.

IP 점검을 무력화시키는 프록시와 봇넷이 있습니다. 매우 좋은 보안 문자를 읽는 스크립트가 있습니다. 인도에는 적은 비용으로 보안 문자를 물리 치는 팀도 있습니다. 당신이 생각 해낼 수있는 어떤 해결책이라도 합리적으로 물리 칠 수 있습니다. Ned Batchelder의 솔루션조차도 WebBrowser 컨트롤 또는 봇넷 또는 프록시 목록과 결합 된 다른 시뮬레이션 된 브라우저를 사용하여 단계적으로 건너 뛸 수 있습니다.


8

현재이를 위해 F5의 최신 BigIP로드 밸런서를 사용하고 있습니다. BigIP에는 단일 IP 뒤의 소스 세트 중에서도 사용 빈도 및 패턴에 따라 스크래퍼 및 봇을 식별 할 수있는 고급 트래픽 관리 기능이 있습니다. 그런 다음이를 조절하거나 대체 컨텐츠를 제공하거나 헤더 또는 쿠키로 태그를 지정하여 애플리케이션 코드에서 식별 할 수 있습니다.


이것이 제가 제안한 정확한 해결책, 특히 자동 조절입니다. 당신은 당신의 자신을 굴릴 수 있습니다, 단지 정기적에서 고급 신호 분석에 의존합니다.
wds

7

먼저 여기서해야 할 일을 요약 해 보겠습니다. 나는 원래의 질문을 단지 역설하고 있다는 것을 알고 있지만, 4에서 2 또는 3을 얻는 훌륭한 제안이 많기 때문에 우리는이 100 % 직선을 얻는 것이 중요하지만, 시연 할 때, 모든 요구 사항을 다루는 다각적 인 접근 방식.

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

프론트 페이지의 급격한 '슬래 밍 (slamming)'은 사이트의 성능을 저하시키고 있으며 문제의 핵심입니다. '슬래 밍'은 단일 IP 봇과 봇넷 모두에서 비롯됩니다. 우리는 둘 다 제거하고 싶습니다.

요구 사항 2 : 사용자 경험을 망치지 마십시오.

우리는 휴먼 오퍼레이터에게 전화를 걸거나 많은 보안 문자를 해결하는 등의 불쾌한 검증 절차를 구현하여 봇 상황을 매우 효과적으로 해결할 수 있지만, 모든 무고한 비행기 승객이 날씬한 기회를 위해 미친 보안 고리를 뛰어 넘도록 강요하는 것과 같습니다 가장 멍청한 테러리스트를 잡는 아 잠깐만 요-우리는 실제로 그렇게합니다. 하지만 우리가 할 수 있는지 보자 하지 woot.com에 그렇게.

요구 사항 3 : '팔 경쟁'피하기 :

언급했듯이 스팸봇 군비 경쟁에 빠지기를 원하지 않습니다. 따라서 숨겨 지거나 뒤죽박죽 된 양식 필드, 수학 질문 등과 같은 간단한 조정은 사소하게 자동 감지 및 회피 할 수있는 모호한 측정이기 때문에 사용할 수 없습니다.

요구 사항 4 : '경보'봇을 막기 :

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


자, 네 가지 요구 사항을 모두 충족시킬 수 있는지 확인해 봅시다. 먼저 언급했듯이 아무도 트릭을 수행 할 수 없습니다. 그것을 달성하기 위해 몇 가지 트릭을 결합해야하며 두 가지 성가심을 삼켜야합니다.

  1. 후프를 뛰어 넘기 위해서는 소수의 사용자가 필요합니다.
  2. 소수의 사용자 만 특별 혜택을받을 수 없습니다

나는 이것이 성가신 것을 알고 있지만, 우리가 '작은'숫자를 충분히 작게 만들 수 있다면 , 긍정적 인 것이 부정적인 것보다 중요하다는 데 동의하기를 바랍니다.

첫 번째 측정 : 사용자 기반 조절 :

이것은 당연한 일이며, 당신이 이미 그렇게 확신합니다. 사용자가 로그인 한 상태에서 초당 600 회 (또는 무언가) 새로 고침을 계속하면 응답을 중지하고 사용자에게 식히라고 지시합니다. 실제로, 당신은 아마 그보다 훨씬 빨리 그의 요청을 조절할 수 있지만, 당신은 아이디어를 얻습니다. 이렇게하면 로그인 한 봇이 사이트 폴링을 시작하자마자 금지 / 거부됩니다. 이것은 쉬운 부분입니다. 인증되지 않은 봇은 우리의 진짜 문제입니다.

두 번째 측정 : 거의 모든 사람이 제안한 IP 스로틀 링의 형태 :

당신이 무슨 상관없이이 수행하는 일부 '봇 슬래 밍'을 방해하는 조절을 기반으로 IP를. 인증되지 않은 (로그인되지 않은) 방문자가 특별 혜택을 받도록 허용하는 것이 중요해 보이 므로 처음에는 IP 만 통과 할 수 있으며 완벽하지는 않지만 단일 IP 봇에 대해 작업합니다. 봇넷은 다른 짐승이지만 다시 돌아올 것입니다. 지금은 빠른 스로틀 링 단일 IP 봇을 이기기 위해 간단한 조절을 수행 할 것입니다.

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

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

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

느린 단일 IP 봇을 즉시 쓸모 없게 만들려면 abelenky가 제안한 전략을 사용하십시오. 지난 24 시간 동안 발견 된 모든 IP에 10 분 전 캐시 된 페이지를 제공하십시오. 이렇게하면 모든 IP가 선택한 기간에 따라 하루 / 시간 / 주당 한 번의 '기회'를 얻게되며, '재로드'를 누르는 실제 사용자에게는 눈에 띄지 않게됩니다. 제안.

이 법안의 아름다움은 그입니다 또한 그들이 봇넷에서 발생하지 않는 한 무력화 '알람 봇'.

(실제 사용자가 계속해서 새로 고침을 허용 한 경우 선호한다고 생각하지만 CAPTCHA 또는 이와 유사한 방식을 사용하지 않고 요청 스팸 봇으로부터 새로 고침 스팸 사람에게 알리는 방법이 없습니다)

넷째 측정 : 재평가 :

보안 문자가 사용자 환경에 해를 끼치므로 피해야합니다. 그러나 _one_ 상황에서 그들은 가장 친한 친구가 될 수 있습니다. 만약 당신이 봇을 막기 위해 매우 제한적인 시스템을 설계했다면, 그것의 제한 때문에-또한 많은 오탐을 포착합니다; 그러면 CAPTCHA 가 최후의 수단으로 사용되어 실제 사용자가 스로틀 링을 통해 미끄러질 수 있습니다 (따라서 성가신 DoS 상황 방지).

물론 좋은 점은 모든 봇이 인터넷에 갇히고 실제 사용자가 CAPTCHA에 귀찮게하는 경우는 거의 없습니다.

10 분짜리 캐시 된 페이지를 제공 할 때 대체적으로 선택적인 CAPCHA 인증 '프론트 페이지 새로 고침'을 제공하는 경우 실제로 새로 고침을 원하는 사람 은 기존 캐시 된 페이지를 가져 오지 않고도 계속 그렇게 할 수 있습니다 하지만 새로 고침 할 때마다 보안 문자를 해결해야합니다. 즉 이다 짜증, 하지만 옵션 하나 가 있기 때문에 단지 경향이 다이 하드 사용자를위한 더 용서가 될 알고 그들의 가능성을 개선하기 위해 시스템을 게임을하고, 그 개선 가능성은 무료로 제공되지 않습니다.

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

크리스토퍼 마한 (Christopher Mahan)은 내가 오히려 좋아한다는 생각을 가지고 있었지만 나는 그것에 다른 스핀을 걸었습니다. 새로운 제안을 준비 할 때마다 다른 두 가지 제안을 준비하십시오. 사람은 아무도 20mm에 12mm 윙 너트처럼 선택할 수 없습니다. 오퍼가 첫 페이지에 표시되면 3 개의 '오퍼'를 모두 같은 그림에 각 오퍼에 해당하는 숫자와 함께 넣으십시오. 사용자 / 봇이 실제로 아이템을 주문할 때, 그들은 원하는 것을 제공하는 (라디오 버튼)을 선택해야 할 것이며, 대부분의 봇은 단지 3 가지 중 2 가지 경우에만 추측 할 것이기 때문에 봇은 가치가 없어 질 것입니다 정크.

당연히 이것은 '알람 봇'을 다루지 않으며 누군가가 올바른 아이템을 선택할 수있는 봇을 만들 수있는 가능성이 적습니다. 그러나 실수로 정크를 구매할 위험이 있으므로 스크립터는 완전히 자동화 된 봇에서 완전히 벗어나야합니다.

여섯 번째 측정 : 봇넷 조절 :

[삭제됨]

알았어 ............ 나는 오늘 저녁 이것의 대부분을 다른 접근법을 시도하면서 보냈다 .... 글로벌 지연 .... 쿠키 기반 토큰 .... 대기중인 서빙 ... '낯선 스로틀'.... 그리고 그것은 작동하지 않습니다. 그렇지 않습니다. 아직 답변을 수락하지 않은 주된 이유는 분산 / 좀비 네트 / 봇넷 공격을 막을 방법을 제안한 사람이 아무도 없다는 사실을 깨달았습니다. 다른 스레드 에서 인증을 위해 봇넷 문제를 해결했다고 생각 하므로 문제에 대한 기대도 높아졌습니다. 그러나 내 접근법은 이것으로 번역되지 않습니다. 지나가는 IP 만 있고, 충분히 큰 봇넷은 IP 주소를 기반으로 한 분석에서 자신을 드러내지 않습니다.

그래서 당신은 그것을 가지고 있습니다 : 나의 여섯 번째 척도는 무시됩니다. 아무것도. 지퍼. 봇넷이 보통의 IP 스로틀에 걸릴 정도로 작거나 빠르지 않은 한, CAPTHA와 같은 명시 적 인간 검증을 포함하지 않는 봇넷에 대한 효과적인 조치는 보이지 않습니다. 미안하지만, 위의 다섯 가지 수단을 결합하는 것이 최선의 방법이라고 생각합니다. 그리고 당신은 아마도 10 분 캐싱의 트릭만으로도 잘 할 수있을 것입니다.


아주 잘 언급했다. 입력 해 주셔서 감사합니다.
Shawn Miller

3이 아닙니다. AOL의 IP 풀에서 몇 개의 봇이 나온다고 가정하면 모든 AOL에 이전 페이지를 제공한다는 의미입니까?
Andy Dent

@Andy : 모든 AOL 사용자가 봇이 스팸 처리 중에 사용한 것과 동일한 IP 주소를 공유하는 경우에만 해당됩니다 .
Jens Roland

6

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

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

세션 ID가 마음에 드는 것을하도록하지만 너무 많은 요청을하면 다시 재생하지 않고 계속할 수 없습니다.


재미있는 아이디어이지만 사용자 경험을 완전히 그리고 완전히 파괴합니다. 사이트를 방문하는 정상적인 사람들은이 사이트를 30 초 동안 쓸모없는 대기로 생각합니다. 인터넷을 탐색하거나 웹앱을 사용할 때 30 초 동안 쓸모없는 대기는 허용되지 않습니다.
Arve Systad

방문하는 정상적인 사람들은 지연을 유발하지 않으며, 부당한 수의 요청을하는 사람 만 있습니다. 아이디어는 것입니다 뺨에 약간 혀,하지만 난 타깃이 : 작은 플래시 게임에 사용하는 경우이 작업을 볼 수 있습니다
폴 딕슨

재미 있고 (가장 가까운) 아이디어이지만, 특히 카나리아 가방 열풍에 짜증이 났으며, 검사를 수행하려면 서버에서 더 많은 처리가 필요합니다 (문제의 큰 부분 임). 또한 봇은 거품을 터뜨릴 수 있습니다. 규칙을 자주 변경해야합니다.
Groxx

각 게임에 토큰이 발행되고 토큰을 발행 한 시간을 알고 있다고 가정하면 토큰을 한 번만 처리하면됩니다 (발행 된 후 30 초에서 300 초 사이). 그것의 아름다움은 봇이 거품을 터뜨려도 여전히 30 초 동안 기다렸다는 것입니다.
Paul Dixon

또한 트래픽을 제한하는 아이디어를 잊지 마십시오. 페이지는 "우리는 매우 바쁘다. 급한 경우에는이 게임을 30 초 동안 플레이하거나 몇 분 후에 다시 시도한다 ...
Paul Dixon

5

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

주된 관심사가 성능 저하이고 실제 망치질을 보고있는 경우 실제로 DoS 공격을 처리하고 있으므로 적절히 처리해야합니다. 일반적인 접근 방법 중 하나는 초당 / 분 / 초 등의 여러 연결 후에 방화벽의 IP에서 패킷을 삭제하는 것입니다. 예를 들어, 표준 Linux 방화벽 인 iptables에는 표준 작업 일치 함수 'hashlimit'가 있으며 시간 단위당 연결 요청을 IP 주소와 연관시키는 데 사용할 수 있습니다.

이 질문은 아마도 마지막 SO-podcast에서 언급 된 다음 SO 파생물에 더 적합 할 것입니다. 아직 시작되지 않았으므로 대답해도 괜찮습니다. :)

편집 :
novatrust가 지적한 것처럼 실제로 ISP가 실제로 고객에게 IP를 할당하지 않는 ISP가 여전히 있으므로 그러한 ISP의 스크립트 고객은 해당 ISP의 모든 고객을 비활성화합니다.


불행하게도 일부 ISP는 공유 IP 주소를 공유합니다. 예를 들어 AOL에는 구성원이 표시되는 제한된 IP 모음이 있습니다. webmaster.info.aol.com/proxyinfo.html 귀하의 솔루션은 많은 ISP의 사용자 수에 대한 엄격한 제한을 부과합니다.
Robert Venables

와, 나는 깜짝 놀랐다. 이런 일이 아직도 진행되고 있습니까?
falstro

이런. AOL이 내 사이트에 액세스하지 않는 것 같습니다.
Karl

5

봇을 처벌하기 위해 Tarpit (Wikipedia Article) 를 구현하는 애플리케이션 앞에 Apache 서버에 리버스 프록시를 작성하십시오 . 지난 몇 초 동안 연결된 IP 주소 목록 만 관리하면됩니다. 단일 IP 주소에서 요청 버스트를 감지 한 후 응답하기 전에 해당 요청을 기하 급수적으로 지연시킵니다.

물론 여러 사람이 NAT의 네트워크 연결을 사용하는 경우 동일한 IP 주소에서 올 수 있지만 사람이 2mS에서 4mS (또는 400mS) 동안 응답 시간을 염두에 두지 않는 반면 봇은 방해를받을 것입니다 지연이 꽤 빨리 증가하여


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

이것들은 흥미로운 개념이지만 "무작위 선택"과 대기 기간은 내가 생각하는 "열풍"의 많은 부분을 제거합니다. 시급한 긴급 상황을 없애고 사이트를 망쳤습니다.
TM.

그림처럼 보인다면 그는 도박 법을 다루어야합니다. 그럴 가치가 없어.
jmucchiello

4

우선, 정의상으로, 봇을 합법적 인 사용자와 분리 할 수있는 상태에서 무국적, 즉 익명의 트랜잭션을 지원하는 것은 불가능합니다.

첫 페이지 히트에서 새로운 스쿼트 방문자에게 약간의 비용을 부과 할 수 있다는 전제를 받아 들일 수 있다면 가능한 해결책이 있다고 생각합니다. 더 나은 이름이 없으면이 솔루션을 "DMV 방문"이라고 느슨하게 부를 것입니다.

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

잡기, 딜러는 당신이 딜러를 방문하고 문을 통해 판매중인 자동차를 볼 수 있도록 유효한 운전 면허증을 보여 주어야합니다. 또한 구매하려면 유효한 운전 면허증을 가지고 있어야합니다.

따라서이 자동차 딜러를 처음 방문한 사람 (Bob이라고 부릅니다)은 입국이 거부되며 DMV 사무소 (옆에 편리하게 위치한)로 운전 면허를 얻습니다.

운전 면허증을 보여준 후 유효한 운전 면허증을 가진 다른 방문객도 출입이 가능합니다. 하루 종일 배회하고, 영업 사원을 괴롭 히고, 책자를 들고, 무료 커피와 쿠키를 비워서 자신을 귀찮게하는 사람은 결국 사라질 것입니다.

라이센스없이 밥으로 돌아 가면 DMV를 한 번 방문하면됩니다. 그 후, 그는 우연히 집에 지갑을 두거나 라이센스가 파기 또는 취소되지 않는 한, 언제든지 딜러를 방문하여 자동차를 구입할 수 있습니다.

이 세상에서 운전 면허증을 만드는 것은 거의 불가능합니다.

DMV를 방문하려면 먼저 "여기서 시작"대기열에서 신청서를 받으십시오. Bob은 완성 된 신청서를 첫 번째 창 1로 가져와야합니다. 여기서 많은 공무원 중 첫 번째 공무원이 그의 신청서를 가져 와서 처리하고, 모든 것이 제대로되어 있으면 창 신청서를 도장하여 다음 창으로 보내십시오. 따라서 Bob은 창에서 창으로 이동하여 응용 프로그램의 각 단계가 끝날 때까지 기다렸다가 마침내 운전 면허증을받을 때까지 기다립니다.

DMV를 "단락 (short circuit)"시키려는 것은 의미가 없습니다. 양식이 3 중으로 올바르게 작성되지 않거나 어떤 창에서든 잘못된 답변이 나오면 응용 프로그램이 종료되고 불쾌한 고객이 처음으로 다시 전송됩니다.

흥미롭게도 사무실이 꽉 차거나 비어 있더라도 각 연속 창에서 서비스를받는 데 거의 같은 시간이 걸립니다. 당신이 줄을서는 유일한 사람이더라도, 직원들은 "다음!"

그러나 DMV에서는 상황이 그렇게 끔찍한 것은 아닙니다. 라이센스를 얻기 위해 모든 대기 및 처리가 진행되는 동안 DMV 로비에있는 동안 자동차 대리점에 대한 매우 재미 있고 유익한 정보를 볼 수 있습니다. 실제로, infomerical은 라이센스를 얻는 데 소요되는 시간을 포괄 할 수있을 정도로 오래 실행됩니다.

약간 더 기술적 인 설명 :

맨 위에서 말했듯이 클라이언트-서버 관계에 대한 상태 정보가 필요하므로 사람과 봇을 분리 할 수 ​​있습니다. 익명의 (인증되지 않은) 방문자를 과도하게 불이익을주지 않는 방식으로 수행하려고합니다.

이 방법은 아마도 AJAX-y 클라이언트 측 처리가 필요할 것입니다. 멍청이를 긁는 새로운 방문자에게는 "환영하는 새로운 사용자!" 텍스트와 그래픽으로 가득 찬 페이지 (적절한 서버 측 조절에 의해)가 완전히로드되는 데 몇 초가 걸립니다. 이런 일이 일어나고 있고 (방문자가 시작 페이지를 읽는 데 바쁠 것 같지만) 그의 식별 토큰은 천천히 조립되고 있습니다.

예를 들어, 토큰 (일명 "드라이버 라이센스")은 20 개의 청크로 구성되어 있습니다. 각각의 연속 된 청크를 얻으려면 클라이언트 측 코드가 서버에 유효한 요청을 제출해야합니다. 다음 청크를 다음 청크 요청에 필요한 '스탬프'와 함께 보내기 전에 (즉, 하나의 DMV 창에서 다음 DMV 창으로 이동하는 데 필요한 스탬프) 모두 완료하려면 약 4 초가 경과해야합니다. 청크-도전-응답-청크-도전-응답 ...- 청크-도전-응답-완성 프로세스.

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

서버 측에서는 유효한 토큰이있는 클라이언트의 페이지보기 만 허용합니다. 또는 모든 사람이 궁극적으로 페이지를 볼 수 있어야하는 경우, 유효한 토큰이없는 요청에 시간을 불이익을줍니다.

이제, 이것이 합법적 인 인간 방문자에게 비교적 양성 적이기 때문에, 토큰 발행 프로세스가 백그라운드에서 비교적 비침 해적으로 발생하지 않도록하십시오. 따라서 재미있는 사본과 그래픽이 포함 된 시작 페이지가 의도적으로 약간 느려집니다.

이 접근 방식은 봇의 스로틀 다운이 기존 토큰을 사용하거나 최소 설정 시간이 걸리도록하여 새로운 토큰을 얻습니다. 물론 이것은 분산 방문자 네트워크를 사용하는 정교한 공격에 큰 도움이되지 않습니다.


4

보안 문자가 있더라도 봇을 완전히 막을 수는 없습니다. 그러나 봇을 작성하고 유지 관리하는 데 어려움을 겪을 수 있으므로 숫자를 줄일 수 있습니다. 특히 그들이 매일 봇을 업데이트하도록 강요함으로써 대부분의 관심을 잃게 될 것입니다.

봇을 작성하기 어렵게 만드는 몇 가지 아이디어는 다음과 같습니다.

  • 자바 스크립트 함수를 실행해야합니다. 자바 스크립트는 봇을 작성하는 데 훨씬 더 많은 고통을줍니다. 실제 자바 스크립트가 아닌 사용자 (최소)를 허용하기 위해 자바 스크립트를 실행하지 않는 경우 보안 문자가 필요할 수 있습니다.

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

  • 매일 필드 ID를 새로운 임의 값으로 업데이트하는 코드를 작성하십시오. 이것은 그들이 매일 봇을 업데이트하도록 강요하여 고통입니다.

  • 매일 필드를 재정렬하는 코드를 작성하십시오 (분명히 사용자에게 무작위가 아닌 방식으로). 그들이 현장 주문에 의존하고 있다면, 그것들을 트립하고 일일 유지 보수를 봇 코드로 다시 강제합니다.

  • 더 나아가 Flash 컨텐츠를 사용할 수 있습니다. 플래시는 봇을 작성하는 데 완전히 고통입니다.

일반적으로 당신이 그것들을 막지 않고 그것을 위해 더 많은 일을한다는 생각을 시작한다면, 아마도 당신이 찾고있는 목표를 달성 할 수있을 것입니다.


인간은 때때로 비인간적 인 타이핑 형태의 필러를 사용합니다.
Loren Pechtel

헌트 펙부터 터치 타이핑에 이르기까지 매우 다양한 타이핑 스타일 / 속도를 허용해야합니다. 그 사이 어딘가에 봇을 작성하는 것은 어렵지 않습니다. 가변 필드 ID 및 순서와 같은 것은 양식을 읽고 구문 분석하여 피할 수 있습니다.
Kornel

4

등록되지 않은 사용자를 위해 모든 제품 공지 사항에 5 분 지연을 적용하십시오. 일반 사용자는 실제로이를 알지 못하며 비 캐주얼 사용자는 어쨌든 등록됩니다.


3

들어오는 IP를 확인하여 요구하는 큰 부담을 느끼지 못합니다. 반대로, 나는 클라이언트 중 하나를 위해 5 분마다 HTTP 액세스 로그를 분석하는 프로젝트를 수행했습니다 (실시간 일 수는 있었지만 어떤 이유로 든 내가 완전히 이해하지 못하는 이유는 없었습니다). 적법한 검색 엔진 (google, yahoo 등)에 속하는 것으로 주소를 확인할 수없는 경우 과도한 수의 요청을 생성하는 모든 IP 주소의 연결을 차단하는 방화벽 규칙을 만듭니다.

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

그렇습니다. DDOS 기술은 분명히 존재하지만이 체계를 무너 뜨릴 수는 있지만 실제로는 그런 일이 일어나지 않습니다. 반대로 그는 서버의 부하를 크게 줄 였다고 말합니다.


3

저의 접근 방식은 비 기술적 솔루션에 초점을 맞추는 것입니다 (그렇지 않으면 잃어 버릴 팔 레이스에 들어가거나 적어도 많은 시간과 돈을 소비합니다). 청구 / 배송 부품에 중점을 두었습니다. 동일한 주소로 여러 번 배송하거나 단일 결제 방법으로 여러 번 청구하여 봇을 찾을 수 있습니다. 몇 주에 걸쳐 여러 항목에 걸쳐이 작업을 수행 할 수도 있으므로 사용자가 이전 항목 (실제로 빠르게 응답하여)을받은 경우 이번에는 일종의 "핸디캡"이 할당 될 수 있습니다.

이것은 또한 운이 좋으며 구매에 실패하는 사람들의 범위를 넓히는 부작용 (유익한 것 같아요, 그러나 귀하의 경우에는 마케팅에 잘못된 것일 수 있습니다)이 있습니다.


3

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

내가 이해하는 것처럼, 봇은 당신이 판매하는 가방을 진정으로 구매하려는 사람들에 의해 설정됩니다 . 문제는 -

  1. 봇을 운영하지 않는 다른 사람들은 살 기회가 있으며 제한된 양의 가방을 제공합니다.
  2. 당신은 당신의 위치에 인간을 끌고 가방을 판매하고 싶습니다.

봇을 피하려고 시도하는 대신 잠재적 인 백 구매자가 전자 메일 또는 SMS 업데이트를 구독하여 판매가 발생할 때 알림을받을 수 있습니다. 1 분 또는 2 회의 헤드 스타트 ​​(판매가 시작되고 무작위로 생성되어 메일 / SMS와 함께 전송되는 특수 URL)를 제공 할 수도 있습니다.

구매자가 사이트에있는 구매자를 구매하면 사이드 배너 나 원하는 항목을 표시 할 수 있습니다. 봇을 실행하는 사람들은 단순히 알림 서비스에 등록하는 것을 선호합니다.

봇 러너는 여전히 구매를 더 빨리 완료하기 위해 알림에 봇을 실행할 수 있습니다. 이에 대한 일부 솔루션은 원 클릭 구매를 제공 할 수 있습니다.

그건 그렇고, 당신은 사용자가 등록되지 않았다고 언급했지만이 가방을 사는 사람들은 무작위 구매자가 아니라 판매를 기대하는 사람들처럼 들립니다. 따라서, 그들은 "가방"을 "이기는"이점을 얻기 위해 기꺼이 등록 할 수 있습니다.

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

아사 프


2

분당 많은 요청을하는 시간 차단 사용자 에이전트. 예를 들어 10 분 동안 정확히 5 초마다 페이지를 요청하는 사람이 있다면 아마도 사용자가 아닐 것입니다. 그러나 이것을 올바르게 얻는 것은 까다로울 수 있습니다.

경고가 발생하면 가능한 한 적은 DB-IO를 사용하여 모든 요청을 정적 페이지로 리디렉션하여 X 분 후에 다시 허용 될 것이라는 메시지를 표시합니다.

페이지 요청에만 적용하고 미디어 (js, 이미지 등)에 대한 모든 요청을 무시해야한다는 점을 추가하는 것이 중요합니다.


개인 프로젝트 에서이 작업을 수행했는데 좋은 방법 인 것 같습니다. 페이지를 방문 할 때 모든 IP를 기억하고 페이지를 너무 자주 방문한다는 의미에 대한 규칙을 설정해야합니다. 문제는 OP가 IP 검사가 너무 비싸서 이해할 수 없다는 것입니다.
Karl

IP 검사를 직접 구현하면 (예 : 데이터베이스, PHP 스크립트 등) 구현하는 데 비용이 많이 듭니다. 방화벽이 당신을 위해 그것을하고 훨씬 더 실현 가능하게하십시오.
rmeador

rmeador : 또한 요청이 HTML 또는 다른 미디어에 대한 것인지 판단하기가 훨씬 더 어려워 보입니다. 페이지에 20 개의 외부 항목이있는 경우 1-2 초 안에 새 사용자에 대한 최소 21 개의 요청을보고 있습니다.
Oli

2

DoS를 방지하면 위에서 설명한 @davebug의 목표 중 2 위를 물리 칠 수 있습니다. "봇이 속도를 늦추지 않는 속도로 사이트를 유지하십시오."

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


2

스패머들이 정규 쓰레기통에서 "쓰레기의 늪지"경매에서이기려고합니까? 다음 경매가 문자 그대로 "쓰레기통"이되지 않습니까? 스패머는 강아지로 가득 찬 가방에 좋은 돈을 지불하게되며, 우리 모두는 그들을 비웃습니다.


2

여기서 중요한 것은 서버에서로드를 제거하도록 시스템을 변경하고, 봇이 게임을하고 있다는 사실을 알리지 않고 봇이 쓰레기를 이기지 못하도록하거나 전략을 수정한다는 것입니다. 나는 당신의 끝에 약간의 처리없이 이것을 할 수있는 방법이 없다고 생각합니다.

따라서 홈페이지에 적중을 기록합니다. 누군가 페이지를 방문 할 때마다 해당 연결이 마지막 방문과 비교되고 너무 빠르면 오퍼없이 페이지 버전이 전송됩니다. 이는 캐시 된 버전의 홈페이지를 제공하는 서버에 봇 (너무 빠른 히트)을 보내는 일종의로드 밸런싱 메커니즘으로 수행 할 수 있습니다. 실제 사람들은 좋은 서버로 보내집니다. 이렇게하면 주 서버에서로드가 제거되고 봇이 여전히 페이지를 올바르게 제공한다고 생각합니다.

어떤 식 으로든 제안을 거절 할 수 있다면 더욱 좋습니다. 그런 다음 여전히 가짜 서버에서 제안을 할 수 있지만 봇이 "죄송합니다, 당신은 충분히 빠르지 않았습니다"라는 양식을 채울 때 :) 그들은 여전히 ​​그들이 여전히 게임에 있다고 생각할 것입니다.


2

스크립터가 명령을 내린다는 것을 어떻게 알 수 있습니까?

문제의 요점은 합법적 인 사용자와 스크립터를 분리 할 수 ​​없으므로 차단 할 수 없다는 것입니다. 그래서 스크립터가 있다는 것을 어떻게 알 수 있습니까?

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


2

문제를 해결해 봅시다. 실제 사람들이 사고 싶은 물건을 구매하는 봇이 있습니다. 실제 사람들이 구매하고 싶지 않은 물건을 봇이 구매할 가능성이 얼마나 될까요 ?

스크래핑 봇이 실제 상황이라고 생각할 수있는 일부 표시되지 않은 html에 대한 임의의 기회를 가지십시오. 이것은 엄청나게 비싼 것을 구매하기 위해 여행합니다 (또는 실제 구매하지는 않지만 밴리스트에 입금 할 지불 세부 정보를 얻습니다).

봇이 '구매하기'가 아닌 '사용자에게 경고'로 전환하더라도, 허위 경보를 충분히받을 수 있다면 사람들에게 충분히 가치가 없어 질 수 있습니다 (모두가 아닐 수도 있지만 사기는 약간 감소합니다) 전혀 신경 쓰지 않는 것보다 낫습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.