최근 서버에 리소스를 많이 소모하는 AI 크롤러로부터 보호하기 위해 Anubis를 배포했습니다. 이 도구는 브라우저와 유사한 user agent로 전송된 요청에 대해 "Making sure you’re not a bot!"이라는 제목의 정적 페이지를 전송하고, JavaScript 기반의 proof-of-work를 수행한 후 올바른 페이지로 리다이렉트합니다. 이름에 Mozilla가 없는 user agent는 페이지에 직접 접근할 수 있습니다.
현재 discourse의 onebox 링크 미리보기가 깨져 있는데, 인라인 링크에 대해서만 문제가 발생합니다.
서버 로그를 확인해 보니 discourse가 두 가지 유형의 user agent를 전송하고 있습니다:
큰 onebox 링크 미리보기용: Discourse Forum Onebox v3.4.1 (03f3e84ce520d375aa1c66bb0e95cc5ed9832776 커밋의 lib/onebox/helpers.rb#L217-L226 참조)
인라인 링크 미리보기용: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15 (03f3e84ce520d375aa1c66bb0e95cc5ed9832776 커밋의 lib/final_destination.rb#L40 참조)
관리자 설정에서 “Force custom user agent hosts"를 시도해 보았으며, 이 설정은 "모든* 요청에 대해 사용자 지정 onebox user agent를 사용할 호스트.”*라고 설명되어 있지만, 차이가 없었습니다.
또한 숨겨진 설정인 onebox_user_agent를 변경하는 것도 테스트해 보았지만, 이는 일반 onebox 링크 미리보기의 user agent만 변경할 뿐 인라인 미리보기의 user agent는 변경하지 않았습니다.
이것은 버그로 보입니다. 인라인 링크 미리보기에도 동일한 구성 가능한 Discourse Forum Onebox user agent를 사용하는 것이 더 합리적이지 않을까요?
onebox에서 두 가지 다른 요청을 보내는 것을 확인했습니다. 하나는 브라우저의 사용자 에이전트를 사용하는 HEAD 요청이고, 다른 하나는 식별 가능한 사용자 에이전트를 사용하는 GET 요청입니다. HEAD 요청이 리디렉션(챌린지 페이지로)되면, 리디렉션된 페이지로 세 개의 요청이 추가로 전송됩니다.
onebox가 작동하려면 챌린지 시스템에서 모든 HEAD 요청을 화이트리스트에 추가해야 합니다. 인라인 onebox뿐 아니라 블록 onebox도 마찬가지입니다.