모든 사이트에서 CAPTCHA가 뜨는 이유: 원인과 해결법

끊임없는 CAPTCHA는 거의 항상 네트워크 경로, 브라우저 설정, 또는 둘 사이의 불일치에서 비롯됩니다. 흔한 순서대로 정리한 원인과 각각의 해결법입니다.
CAPTCHA가 계속 뜬다면 대개 이유는 하나입니다. 사이트에 접속하는 방식이 기계처럼 보이거나, 여러 사람이 한 출입구를 같이 쓰는 것처럼 보여서, 사이트가 더 분명한 신호를 얻을 때까지 진입 장벽을 높인 것입니다. 검사는 증상일 뿐이고, 원인은 네트워크 경로나 브라우저 설정에 있거나, 이 둘이 사이트에 서로 다른 이야기를 하고 있다는 데 있습니다.
아래 원인을 순서대로 확인해 보세요. 앞의 세 가지가 압도적으로 흔하며, 모두 같은 곳, 즉 트래픽이 들어오는 주소에 있습니다.
먼저 주소부터 보세요. 대개 여기가 원인입니다
주소를 여럿이 공유하거나 이력이 있는 경우
대부분의 연결은 나만의 주소를 주지 않습니다. 모바일 통신사와 많은 가정용 인터넷 업체는 수많은 가입자를 소수의 공인 주소 뒤에 몰아넣습니다. 사무실, 캠퍼스, 코워킹 스페이스도 마찬가지입니다. 그 주소 뒤의 다른 사람이 오늘 아침에 한 일을 오후에는 내가 떠안게 됩니다.
저렴한 프록시 풀도 같은 방식인데 조건은 더 나쁩니다. 공유 레지덴셜 풀은 그 시간에 구매하는 누구에게나 같은 주소를 빌려주며, 앞서 그 주소에서 로그인 시도가 몰렸던 사이트는 다음 시도를 조심스럽게 볼 수밖에 없습니다.
해결은 내가 실제로 어떤 주소를 내보내고 있는지 알아내는 것에서 시작합니다. 판매자의 설명을 믿지 말고 직접 테스트하세요. PowerOps에서는 프록시를 라이브러리에 추가하고 계정에 연결하기 전에 테스트하며, 테스트 결과에는 실제로 관측된 주소가 표시됩니다. 경로가 공유되고 있다면 프로필을 그렇지 않은 경로로 옮기세요.
데이터센터 주소인 경우
호스팅 업체에 속한 주소 대역은 공개되어 있고, 목록화되어 있으며, 조회하기도 아주 쉽습니다. 데이터센터 주소 자체에는 문제가 없고, 평범한 트래픽도 상당수가 거기서 나옵니다. 다만 로그인한 일반 소비자 계정이 있을 만한 자리는 아니기 때문에 사이트는 그에 맞게 가중치를 둡니다.
해결책은 데이터센터 주소를 개인 로그인이 필요 없는 작업에만 쓰고, 계정 세션에는 레지덴셜 또는 모바일 주소를 쓰는 것입니다. 비용은 올라가고 마찰은 줄어듭니다. 이 거래가 결정의 전부입니다.
모두가 쓰는 VPN 출구를 사용하는 경우
일반 소비자용 VPN은 엄청나게 많은 사람을 소수의 출구 주소에 몰아넣습니다. 제품이 설계대로 동작하는 것입니다. 그래서 VPN 뒤의 세션은 다른 곳에서는 받지 않는 검사를 받게 됩니다. 그 주소를 의심받게 한 것은 내가 한 일이 아니라 순전히 이용자 수입니다.
해결책은 고정 주소를 파는 업체에서 프로필마다 별도의 경로를 쓰는 것입니다. 관련 없는 용도로 VPN이 필요하다면 계정 작업을 하는 기기나 프로필에서는 꺼 두고, 프록시 위에 겹쳐 쓰지는 마세요.
세션 도중에 주소가 바뀌는 경우
로테이션 엔드포인트는 요청마다 또는 일정 간격마다 새 주소를 줍니다. 공개 데이터를 수집할 때는 유용하지만, 로그인 세션에서는 스스로 만든 문제입니다. 한 도시에서 시작한 세션이 몇 분 뒤 다른 도시에서 이어지는 것은 어떤 사람도 하지 않는 행동입니다.
이 원인에는 뚜렷한 패턴이 있습니다. 처음 몇 분은 깨끗하다가, 이후 이동할 때마다 검사가 나타나고 중간에 갑자기 로그아웃되기도 합니다.
해결책은 엔드포인트를 고정(sticky) 또는 세션 유지 모드로 바꾸고, 유지 시간을 작업 세션보다 길게 잡는 것입니다. 첫 로그인 전에 경로를 지정하세요. 첫 세션이 그 계정의 정상 상태가 무엇인지 정하기 때문입니다.
다음으로 브라우저가 일관된 이야기를 하는지 확인하세요
시간대, 언어, 주소가 서로 어긋나는 경우
프랑크푸르트를 거치는 프로필이 로스앤젤레스 시간대를 보고하면, 같은 질문에 두 가지 답을 한 셈입니다. 브라질 주소를 쓰면서 브라우저 언어 목록에 베트남어만 들어 있는 경우도 마찬가지입니다. 어느 값도 그 자체로는 이상하지 않지만, 합쳐지면 사이트가 찾을 수 있는 가장 값싼 모순이 됩니다.
해결책은 프로필의 시간대와 언어 목록을 경로가 도착하는 국가에 맞추고, 경로를 바꿀 때마다 두 가지를 함께 확인하는 것입니다. 목록에서 스스로 만드는 원인 중 가장 흔하며, 고치는 데 10초면 충분합니다.
요청 리듬이 자동화처럼 보이는 경우
정확히 4초 간격으로 페이지를 불러오고, 중간 포커스 이벤트 없이 양식을 즉시 채우고, 스크롤 없이 이동하고, 열두 개의 프로필이 같은 서브넷에서 같은 초에 똑같은 일을 합니다. 어느 것도 금지된 행동은 아니지만 모두 평범하지 않으며, 평범하지 않은 것이 진입 장벽을 높입니다.
해결책은 속도 조절입니다. 모든 프로필을 한꺼번에 시작하지 말고 시차를 두세요. 스크립트 작업에는 가변 지연을 넣고 다음 동작 전에 페이지가 안정되도록 기다리세요. 배치 크기도 줄이세요. 스크립트가 사람보다 빠르게 사이트를 돌아다닌다면, 사이트가 상대가 누구인지 물을 만합니다.
그다음에는 브라우저가 무엇을 보관하고 무엇을 차단하는지 보세요
쿠키가 오래되었거나, 없거나, 매일 밤 지워지는 경우
대부분의 검사는 자신의 결과를 기록합니다. 통과하면 사이트가 이 브라우저가 이미 답했다는 표시를 저장하고, 한동안 검사가 나타나지 않습니다. 종료할 때마다 쿠키를 지우거나, 시크릿 창으로 탐색하거나, 매번 새 임시 프로필을 만들면 이 기록은 세션이 끝날 때마다 버려집니다. 다음 방문은 처음부터 다시 시작합니다.
해결책은 자기만의 영구 디렉터리를 가진 프로필을 쓰고, 상태가 기록되도록 제대로 종료하는 것입니다. 세션 도중에 강제 종료된 프로필은 방금 얻은 기록을 잃을 수 있습니다.
검사에 필요한 스크립트를 무언가가 차단하는 경우
검사는 스크립트로 실행되며, 보통 방문 중인 사이트가 아니라 보안 업체의 도메인에서 불러옵니다. 공격적인 콘텐츠 차단기, 스크립트 차단기, 강화된 개인정보 보호 확장 프로그램, 비활성화된 서드파티 저장소는 모두 이 로딩을 깨뜨릴 수 있습니다. 검사가 끝나지 않으니 재시도하고, 사용자 입장에서는 무한 루프이거나 계속 돌기만 하고 끝나지 않는 챌린지 상자로 보입니다.
다음 순서로 확인하세요.
- 확장 프로그램이 전혀 없는 프로필에서 같은 페이지를 엽니다. 루프가 멈추면 확장 프로그램이 원인입니다.
- 다시 나타날 때까지 확장 프로그램을 하나씩 켭니다. 콘텐츠 차단기와 개인정보 강화 도구가 주된 원인입니다.
- 차단기를 통째로 끄지 말고, 차단하고 있는 곳에서 챌린지 제공업체의 도메인만 허용하세요.
- 해당 사이트에서 JavaScript와 서드파티 저장소가 비활성화되어 있지 않은지 확인합니다.
- 시스템 시계를 확인합니다. 시계가 몇 분만 어긋나도 챌린지가 의존하는 서명된 토큰이 깨지며, 증상은 시계 문제와 전혀 비슷해 보이지 않습니다.
증상에서 원인으로
왼쪽 열에서 지금 보이는 증상을 찾고, 오른쪽 열의 해결법부터 시작하세요.
| 보이는 증상 | 가장 유력한 원인 | 먼저 시도할 것 |
|---|---|---|
| 모든 사이트, 모든 프로필에서 첫 요청부터 검사가 뜸 | 주소 자체의 문제: 공유, 혼잡, 또는 데이터센터 대역 | 경로를 테스트하고 주소가 어디 소속인지 조회 |
| 한 프로필만 문제이고 나머지는 정상 | 해당 프로필의 경로 또는 저장된 상태 | 다른 것을 바꾸기 전에 검증된 경로로 교체 |
| 몇 분은 깨끗하다가 이동할 때마다 검사가 뜸 | 세션 도중 주소가 바뀌는 로테이션 엔드포인트 | 엔드포인트를 유지 시간이 긴 고정 모드로 전환 |
| 검사를 통과했는데 같은 검사가 곧바로 다시 뜸 | 통과 기록이 저장되지 않거나 필요한 스크립트가 차단됨 | 종료 시 쿠키 삭제를 중단하고, 확장 프로그램을 끈 채 재시도 |
| 챌린지 상자가 돌기만 하고 끝나지 않음 | 차단기가 챌린지 스크립트 로딩을 막고 있음 | 제공업체 도메인을 허용한 뒤 시스템 시계 확인 |
| 로그인 전에 사이트가 엉뚱한 언어로 열림 | 로케일과 경로가 불일치 | 프로필의 언어와 시간대를 경로의 국가에 맞춤 |
| 프록시를 바꾼 직후 시작됨 | 새 엔드포인트의 이력 | 엔드포인트를 테스트하고 업체에 다른 주소 요청 |
| 확장 프로그램이 업데이트된 직후 시작됨 | 해당 확장 프로그램 | 그 사이트에서 비활성화하고 새로고침 |
하지 말아야 할 것
몇 가지 반사적인 행동은 거의 확실하게 상황을 악화시킵니다.
- 검사를 떨쳐 내려고 프로필의 아이덴티티를 무작위로 바꾸지 마세요. 방문할 때마다 바뀌는 기기는 걱정하던 어떤 신호보다 더 큰 신호이며, 이미 통과한 모든 검사의 저장된 증거도 버리게 됩니다.
- 첫 대응으로 쿠키를 지우지 마세요. 그 쿠키가 통과했다는 기록입니다. 지우면 다음 방문이 처음부터 시작되는 것이 보장됩니다.
- 프록시 위에 VPN을 겹치지 마세요. 두 경로가 위치를 두고 서로 다른 말을 하게 되고, 평범한 타이밍도 이상해 보일 만큼 지연이 늘어납니다.
- 새로고침을 연타하지 마세요. 한 주소에서 반복되는 실패한 시도는 검사가 측정하는 바로 그 행동입니다.
- 세션 도중에 계정을 완전히 새로운 경로로 옮기지 마세요. 세션을 마치고, 경로를 바꾸고, 다시 로그인하세요.
그리고 도와드리지 않는 것이 하나 있습니다. 이런 검사를 자동으로 풀어 주는 일은 PowerOps가 하는 일의 범위 밖이며, 이 블로그가 설명하는 범위 밖이기도 합니다. 그런 서비스를 파는 곳은 있지만, 우리는 연동하지 않고 문서화하지도 않으며, 제품 어디에도 보안 검사를 통과하도록 만든 부분은 없습니다. 위의 모든 내용은 사이트가 애초에 물어볼 이유를 없애는 것에 관한 것입니다. 대신 답해 주는 일은 다른 사업이고, 우리는 그 사업을 하지 않습니다.
그래도 해결되지 않는다면
검사가 나와 아무 상관이 없는 경우도 있습니다. 공격을 받는 사이트는 모두에게 기준을 높이고, 한 나라 전체의 트래픽이 하루 이틀 더 엄격한 규칙 아래 놓이기도 합니다. 오후 한나절을 쓰기 전에 프록시도 프로필도 없는 일반 연결에서 같은 페이지를 열어 보세요. 거기서도 검사가 기다리고 있다면 답은 기다리는 것입니다.
나머지 경우는 짧은 목록으로 정리됩니다. 이력이 있는 경로, 가만히 있지 못하는 경로, 서로 어긋나는 값, 얻은 것을 보관하지 못하는 브라우저. 이 네 가지를 고치면 검사는 업무의 일상이 아니라 가끔 있는 불편으로 돌아갑니다.


