JavaScript는 현재 브라우저가 헤드리스 브라우저인지 어떻게 감지합니까?
헤드리스 브라우저란 무엇인가요?
헤드리스 브라우저는 그래픽 인터페이스로 실행할 수 있는 브라우저를 의미합니다. 테스트 수행, 웹 페이지 스크린샷 찍기 등 프로그래밍을 통해 다양한 작업을 자동으로 수행하도록 헤드리스 브라우저를 제어할 수 있습니다.
for"헤드리스" 브라우저란 무엇입니까?
"헤드리스"라는 단어는 원래 "헤드리스 컴퓨터"에서 유래되었습니다. "헤드리스 컴퓨터"에 대한 Wikipedia 항목:
헤드리스 시스템은 모니터(예: "헤드"), 키보드 및 마우스 없이 작동하도록 구성된 컴퓨터 시스템 또는 장치를 의미합니다. 헤드리스 시스템은 일반적으로 네트워크 연결을 통해 제어되지만 일부 헤드리스 시스템 장치는 RS-232 직렬 연결을 통한 장치 관리가 필요합니다. 서버는 일반적으로 운영 비용을 줄이기 위해 헤드리스 모드를 사용합니다.
헤드리스 브라우저를 감지하는 이유는 무엇입니까?
앞서 언급한 두 가지 무해한 사용 사례 외에도 헤드리스 브라우저를 사용하여 악성 작업을 자동화할 수 있습니다. 가장 일반적인 형태는 웹을 크롤링하거나, 트래픽을 가짜로 만들거나, 웹사이트 취약점을 탐지하는 것입니다.
가장 인기 있는 헤드리스 브라우저는 PhantomJS입니다. Qt 프레임워크를 기반으로 하기 때문에 일반적인 브라우저에 비해 다양한 기능을 가지고 있으므로 식별할 수 있는 방법이 많습니다.
그러나 구글은 크롬 59부터 헤드리스 구글 크롬을 출시했습니다. 다른 프레임워크가 아닌 정통 구글 크롬을 기반으로 개발돼 프로그램이 일반 브라우저인지 헤드리스 브라우저인지 구별하기 어렵다는 점에서 PhantomJS와 다르다.
아래에서는 프로그램이 일반 브라우저에서 실행되고 있는지 헤드리스 브라우저에서 실행되고 있는지 확인하는 몇 가지 방법을 소개합니다.
헤드리스 브라우저 감지
참고: 이 방법은 4개의 장치(Linux 2개, Mac 2개)에서만 테스트되었습니다. 즉, 헤드리스 브라우저를 감지하려면 다른 많은 방법이 있어야 합니다.
사용자 에이전트
먼저 브라우저 유형을 결정하는 가장 일반적인 방법인 사용자 에이전트를 확인하는 방법을 소개하겠습니다. Linux 컴퓨터에서 Chrome 버전 59 헤드리스 브라우저의 사용자 에이전트 값은 다음과 같습니다.
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36"
따라서 다음과 같이 헤드리스 Chrome 브라우저인지 여부를 감지할 수 있습니다.
if (/HeadlessChrome/.test(window.navigator.userAgent)) { console.log("Chrome headless detected"); }
사용자 에이전트는 HTTP 헤더에서도 얻을 수 있습니다. 그러나 두 경우 모두 쉽게 위조됩니다.
Plugins
navigator.plugins는 현재 브라우저의 플러그인 정보가 포함된 배열을 반환합니다. 일반적으로 일반 Chrome 브라우저에는 Chrome PDF 뷰어 또는 Google Native Client와 같은 기본 플러그인이 있습니다. 대조적으로, 헤드리스 모드에서는 플러그인이 없으며 빈 배열이 반환됩니다.
if(navigator.plugins.length == 0) { console.log("It may be Chrome headless"); }
Language
Google Chrome에는 현재 브라우저 언어 설정을 가져올 수 있는 두 가지 JavaScript 속성인 navigator.언어와 navigator.언어가 있습니다. 첫 번째는 브라우저 인터페이스의 언어를 나타내고, 후자는 브라우저 사용자가 두 번째로 선택한 언어를 모두 저장하는 배열을 반환합니다. 그러나 헤드리스 모드에서는 navigator.언어가 빈 문자열을 반환합니다.
if(navigator.languages == "") { console.log("Chrome headless detected"); }
WebGL
WebGL은 HTML 캔버스에서 3D 렌더링을 수행할 수 있는 API 세트를 제공합니다. 이러한 API를 통해 그래픽 드라이버 공급업체와 렌더러에 쿼리할 수 있습니다.
Linux의 일반 Google Chrome에서 우리가 얻는 렌더러 및 공급업체 값은 "Google SwiftShader" 및 "Google Inc."입니다.
而在无头模式里,我们获得的一个是 “Mesa OffScreen”——它是没有使用任何 window 系统的渲染技术的名称,和 “Brian Paul” ——开源 Mesa 图形库的最初的程序。
var canvas = document.createElement('canvas'); var gl = canvas.getContext('webgl'); var debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL); var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL); if(vendor == "Brian Paul" && renderer == "Mesa OffScreen") { console.log("Chrome headless detected"); }
并不是所有版本的无头浏览器都有同样的这两个值。然而目前在无头浏览器里是“Mesa Offscreen” 和 “Brian Paul” 这两个值。
浏览器特征
Modernizr 可以探测出当前浏览器对HTML和CSS各种特性的支持程度。我发现,普通Chrome和无头Chrome里唯一的区别是,无头模式下没有 hairline 特征,它是用来检测是否支持 hidpi/retina hairlines的
if(!Modernizr["hairline"]) { console.log("It may be Chrome headless"); }
加载失败的图片
最后,我发现的最后一个方法,也是看起来最有效的方法,切入点是检查浏览器里不能正常加载的图片的高和宽。
var body = document.getElementsByTagName("body")[0]; var image = document.createElement("img"); image.src = "http://iloveponeydotcom32188.jg"; image.setAttribute("id", "fakeimage"); body.appendChild(image); image.onerror = function(){ if(image.width == 0 && image.height == 0) { console.log("Chrome headless detected"); } }
这就是检测无头浏览器的详细步骤
推荐教程:《JS教程》
위 내용은 JavaScript는 현재 브라우저가 헤드리스 브라우저인지 어떻게 감지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

OUYI 계정을 등록하는 단계는 다음과 같습니다. 1. 유효한 이메일 또는 휴대폰 번호를 준비하고 네트워크를 안정화시킵니다. 2. Ouyi의 공식 웹 사이트를 방문하십시오. 3. 등록 페이지를 입력하십시오. 4. 정보를 등록하고 작성하려면 이메일 또는 휴대폰 번호를 선택하십시오. 5. 검증 코드를 얻고 입력하십시오. 6. 사용자 계약에 동의합니다. 7. 등록 및 로그인을 완료하고 KYC를 수행하고 보안 조치를 설정하십시오.

WebSocket 서버가 401을 반환 한 후 브라우저의 응답하지 않는 메소드. Netty를 사용하여 WebSocket 서버를 개발할 때는 종종 토큰을 확인해야합니다. � ...

Binance 앱을 안전하게 다운로드하려면 공식 채널을 살펴 봐야합니다. 1. Binance 공식 웹 사이트를 방문하십시오. 2. 앱 다운로드 포털을 찾아서 클릭하십시오.

Java의 매개 변수로 WeChat 애플릿 QR 코드를 생성하고 HTML 페이지에 표시하는 것이 일반적인 요구 사항입니다. 이 기사는 J ... 사용 방법에 대해 자세히 논의 할 것입니다.

JWT 및 세션에 대한 혼란과 답변은 JWT 및 세션을 학습 할 때 많은 초보자가 종종 성격과 적용 가능한 시나리오에 대해 혼란스러워합니다. 이 기사는 J ...을 중심으로 진행됩니다.

JavaScript가 일일 프로그래밍에서 사용자 컴퓨터 하드웨어 정보를 얻을 수없는 이유에 대한 토론 많은 개발자가 JavaScript를 직접 얻을 수없는 이유에 대해 궁금합니다 ...

Ouyi Exchange 앱은 Apple 휴대 전화 다운로드를 지원하고, 공식 웹 사이트를 방문하고, "Apple Mobile"옵션을 클릭하고, App Store에 입력하고 설치하고, Cryptocurrency 거래를 수행하려면 등록 또는 로그인합니다.

USDT 전송 주소가 잘못된 후 먼저 전송이 발생했음을 확인한 다음 오류 유형에 따라 측정 값을 취합니다. 1. 전송 확인 : 트랜잭션 기록을보고 블록 체인 브라우저에서 트랜잭션 해시 값을 얻고 쿼리하십시오. 2. 조치를 취하십시오 : 주소가 존재하지 않으면 자금이 반환 될 때까지 기다리거나 고객 서비스에 연락하십시오. 유효하지 않은 주소 인 경우 고객 서비스에 문의하고 전문적인 도움을 구하십시오. 다른 사람에게 양도되면 수취인에게 연락하거나 법적 도움을 요청하십시오.
