개발관련/other

스크립트가 웹 사이트를 공격하지 못하도록 막는 방법

Rateye 2021. 11. 23. 10:17
728x90
반응형
질문 : 스크립터가 귀하의 웹 사이트를 꽝 닫는 것을 막기

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

상황

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

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

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

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

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

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

오, 사람들이 우리에게 전화하는 것은 최악의 시나리오가 될 것입니다. 전화를받을 수 있나요?

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

평가하기

lc 다시 : "물론, 과대 광고가 마케팅 계획의 일부가 아니라면." 네, 확실히 그렇습니다. 아이템이 나타날 때의 놀라움과 당신이 그것을 얻을 수 있다면 흥분은 아마도 당신이 실제로 얻는 쓰레기만큼이나 더 중요 할 것입니다. 선착순을 제거하는 모든 것은 쓰레기를 '승리'하는 스릴에 해를 끼칩니다.

novatrust : 그리고 저는 우리의 새로운 봇 오버로드를 환영합니다. 우리는 실제로 제 3 자 앱이 우리 사이트에서 제품 정보를 스캔 할 수 있도록 RSSfeed를 제공하지만 기본 사이트 HTML보다 앞서 있지 않습니다. 내가 올바르게 해석하고 있다면, 당신의 솔루션은 목표 1을 완전히 희생하고 봇이 대부분의 쓰레기를 구매할 것이라는 사실을 포기함으로써 목표 2 (성능 문제)에 도움이됩니다. 당신의 마지막 단락 비관론이 나에게 정확하다고 느끼기 때문에 나는 당신의 응답을 찬성했습니다. 여기에는 은색 총알이없는 것 같습니다.

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

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

원문

지각 가치가 매우 높은 값싼 물건을 판매하고 있고 수량이 매우 제한적이라고 가정 해 보겠습니다. 이 항목을 언제 판매할지 정확히 알 수 없습니다. 그리고 백만 명이 넘는 사람들이 당신이 판매하는 제품을보기 위해 정기적으로 방문합니다.

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

  1. 당신의 사이트는 인간이 아닌 사람들에 의해 파괴되어 모든 사람들의 속도를 늦춘다.
  2. 글을 쓰는 사람들은 결국 상품을 '이겨서' 단골들이 속았다는 느낌을 갖게 됩니다.

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

  • 사용자 경험은 보안 문자를 해독하거나, 고양이를 고르거나, 수학 문제를 풀어야하기 때문에 인간에게는 짜증납니다.
  • 인지 된 이익이 충분히 높고 군중이 충분히 많으면 일부 그룹은 조정을 우회하여 군비 경쟁으로 이어질 것입니다. (이것은 비틀기가 더 간단할수록 특히 사실입니다. 숨겨진 '코멘트'양식, 양식 요소 재정렬, 잘못된 레이블 지정, 숨겨진 'gotcha'텍스트는 모두 한 번 작동 한 다음이 특정 양식을 대상으로 싸우기 위해 변경해야합니다. .)
  • 스크립터가 당신의 트윅을 '해결'할 수 없다고하더라도 스크립터가 당신의 첫 페이지를 강타하는 것을 막을 수는 없습니다. 그들이 [a]를 해결함으로써 이점을 얻는다는 점을 감안할 때, 그들은 주문 페이지에 도달하는 최초의 인간이 될 것이기 때문에 여전히 이길 가능성이 높습니다. 또한 1. 여전히 발생하여 서버 오류가 발생하고 모든 사람의 성능이 저하됩니다.

또 다른 해결책은 IP가 너무 자주 공격하는지 감시하거나 방화벽에서 차단하거나 그렇지 않으면 주문을 차단하는 것입니다. 이렇게하면 2. 문제를 해결할 수 있고 [b]를 방지 할 수 있지만 IP 스캔으로 인한 성능 저하가 엄청나고 스크립터가 스스로 야기한 것보다 1과 같은 더 많은 문제를 일으킬 수 있습니다. 또한 클라우드 네트워킹 및 스팸봇 좀비의 가능성은 IP 검사를 상당히 쓸모 없게 만듭니다.

세 번째 아이디어는 주문 양식을 얼마 동안로드하도록 (예 : 0.5 초) 잠재적으로 빠른 주문의 진행 속도를 늦출 수 있지만, 스크립터는 여전히 어떤 속도로든 해를 끼치 지 않는 첫 번째 사람이 될 것입니다. 실제 사용자.

목표들

  1. 스크립팅을 하지 않는 사람에게 아이템을 판매합니다.
  2. 봇에 의해 느려지지 않는 속도로 사이트를 계속 실행합니다.
  3. 인간임을 증명하기 위해 완료해야 할 작업으로 '정상' 사용자들을 귀찮게 하지 마세요.
답변

CAPTCHA로 SO와 같은 것을 구현하는 것은 어떻습니까?

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

연속으로 x 회 (예 : 2 또는 3) 검사에 실패하면 해당 IP에 시간 초과 또는 기타 조치를 제공합니다. 그런 다음 시간 초과가 끝나면 다시 수표로 덤프하십시오.


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

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

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


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

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

그들이 나를 부르게한다는 의견에 대한 응답으로 여기에는 분명히 그 절충안이 있습니다. 사용자가 판매를 시작할 때 몇 번의 전화 통화를받을 수 있도록 사용자가 인간인지 확인하는 것에 대해 충분히 걱정하고 있습니까? 제품이 인간 사용자에게 전달되는 것에 대해 너무 염려했다면이 결정을 내려야했을 것입니다. 아마도 그 과정에서 (작은) 시간을 희생했을 것입니다.

봇이 귀하의 사이트를 우위로 차지하지 않기로 결정한 것 같으므로 전화가 좋은 선택이 될 수 있다고 생각합니다. 나는 당신의 제품에서 이익을 얻지 못하기 때문에 이러한 전화를받는 데 관심이 없습니다. 당신이 그 이익의 일부를 나누었 으면 나는 관심을 가질 것입니다. 이것이 귀하의 제품이므로 그에 따라 얼마나 관심을 갖고 구현하는지 결정해야합니다.


블록을 해제하는 다른 방법은 그다지 효과적이지 않습니다. 타임 아웃 (하지만 사이트를 다시 헹구고 헹구고 반복합니다), 긴 타임 아웃 (실제로 사람이 제품을 구매하려는 경우, 그들은 SOL이고 수표 실패로 처벌받을 것입니다.), 이메일 (봇에 의해 쉽게 수행됨), 팩스 (동일 함) 또는 달팽이 메일 (너무 오래 걸립니다).

물론 시간 초과가 발생할 때마다 IP 당 시간 초과 기간을 늘릴 수 있습니다. 실수로 진정한 인간을 처벌하지 않는지 확인하십시오.

출처 : https://stackoverflow.com/questions/450835/stopping-scripters-from-slamming-your-website
728x90
반응형