Skip to content

Commit 5866a0c

Browse files
authored
Merge pull request #59 from mrepol742/master
feat: added headless browser check client side
2 parents 85e74a0 + 331ae96 commit 5866a0c

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

app/components/BrowserCheck.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use client";
2+
3+
import { useEffect } from "react";
4+
5+
export default function BrowserCheck() {
6+
useEffect(() => {
7+
async function detectHeadless() {
8+
try {
9+
const isWebdriver = navigator.webdriver;
10+
const hardwareConcurrency = navigator.hardwareConcurrency || 0;
11+
12+
if (isWebdriver || hardwareConcurrency < 2) {
13+
document.title = "Access Denied";
14+
document.body.innerHTML =
15+
"<h1 style='text-align:center;margin-top:20vh;font-family:sans-serif;'>Access Denied</h1>";
16+
window.stop();
17+
}
18+
} catch (err) {
19+
console.error("Browser check error:", err);
20+
}
21+
}
22+
23+
detectHeadless();
24+
}, []);
25+
26+
return null;
27+
}

app/layout.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import DevToolsDetector from "./components/DevToolsDetector";
77
import NextTopLoader from "nextjs-toploader";
88
import { headers } from "next/headers";
99
import NortonSafeweb from "./components/NortonSafeweb";
10+
import BrowserCheck from "./components/BrowserCheck";
1011

1112
const geistSans = Geist({
1213
variable: "--font-geist-sans",
@@ -120,6 +121,7 @@ export default function RootLayout({
120121
{isProduction && (
121122
<>
122123
<DevToolsDetector />
124+
<BrowserCheck />
123125
</>
124126
)}
125127
</body>

0 commit comments

Comments
 (0)