Documentation

Install the browser script, read results in JavaScript, or call the server API.

1. Install (browser)

Paste before </body> on every page you want to protect. Use your public key (Free or Paid).

<script src="https://proxy.offerzono.com/js/guard.js" data-key="YOUR_PUBLIC_KEY" async></script>
  • data-keyPublic key (required)
  • data-cache="30"Reuse result for N minutes in the same tab (saves queries). 0 = check every page
  • data-callback="fn"Calls window.fn(result) after each check

Popup style (hard block / closable / off), threshold and custom text are set per key in your dashboard.

2. Read the result in JavaScript

document.addEventListener('proxyguard:result', function (e) {
  var r = e.detail;
  if (r.status !== 'ok') return;          // skipped (limit reached, domain not allowed...)
  console.log(r.verdict, r.score, r.type); // allow | warn | block
  if (r.verdict === 'block') {
    document.getElementById('claimBtn').disabled = true;
  }
  // send r.token to your server and verify it (step 4)
});

// or: window.ProxyGuard.on(function (r) { ... });
// recheck: window.ProxyGuard.recheck();

Result example:

{
  "status": "ok",
  "token": "9f2c...e41a",
  "verdict": "block",
  "score": 95,
  "type": "VPN",
  "bot": false,
  "flags": [{"code":"vpn","label":"VPN","group":"network"},{"code":"tz_mismatch","label":"Timezone Mismatch","group":"network"}],
  "ip": {"address":"185.x.x.x","country":"NL","country_name":"Netherlands","asn":"AS9009","isp":"M247 Europe SRL"},
  "webrtc": {"ip":"39.x.x.x","country":"PK","country_name":"Pakistan"},
  "browser_tz": "Asia/Karachi"
}

When status is skip, the reason is one of: limit_reached no_plan domain_not_allowed invalid_key rate_limited. Nothing is shown to the visitor in this case.

3. Server API (check any IP)

Use your secret key - never put it in HTML. Every call uses 1 query.

GET https://proxy.offerzono.com/api/v1/ip/8.8.8.8?key=YOUR_SECRET_KEY
{
  "status": "ok",
  "ip": "8.8.8.8",
  "proxy": "yes",
  "type": "Hosting",
  "risk": 60,
  "verdict": "warn",
  "country": "United States",
  "isocode": "US",
  "asn": "AS15169",
  "provider": "Google LLC",
  "flags": ["datacenter"],
  "queries_today": 12,
  "daily_limit": 1000
}

PHP example:

<?php
$ip  = $_SERVER['REMOTE_ADDR'];
$res = json_decode(file_get_contents('https://proxy.offerzono.com/api/v1/ip/' . urlencode($ip) . '?key=YOUR_SECRET_KEY'), true);
if ($res && $res['status'] === 'ok' && $res['verdict'] === 'block') {
    exit('VPN / Proxy not allowed');
}

4. Verify a browser token (anti-tamper)

A visitor can disable JavaScript. For important actions (faucet claim, withdraw) send r.token with your form and verify it on your server. Verification is free (no query used). Tokens expire after 2 hours.

GET https://proxy.offerzono.com/api/v1/verify?token=TOKEN&key=YOUR_SECRET_KEY&ip=VISITOR_IP
<?php
$t = preg_replace('/[^a-f0-9]/', '', $_POST['pg_token'] ?? '');
$v = json_decode(file_get_contents('https://proxy.offerzono.com/api/v1/verify?token=' . $t . '&key=YOUR_SECRET_KEY&ip=' . urlencode($_SERVER['REMOTE_ADDR'])), true);
if (!$v || $v['status'] !== 'ok' || $v['verdict'] === 'block' || $v['ip_match'] === false) {
    exit('Security check failed');
}

Detection flags

CodeNameMeaning
torTor NetworkExit node of the Tor anonymity network
vpnVPNIP belongs to a known VPN provider range
proxyProxyIP is listed as an open / public proxy
datacenterDatacenter / HostingIP belongs to a hosting / datacenter range
asn_hostingHosting ISP (ASN)ISP name / ASN matches a hosting or VPN company
blacklistBlacklisted IPIP is on the admin blacklist
proxy_headersProxy HeadersRequest carries proxy / forwarding headers
webrtc_leakWebRTC IP LeakWebRTC revealed a different (real) IP than the connection
tz_mismatchTimezone MismatchBrowser timezone does not match the IP country
webdriverWebDriver Activenavigator.webdriver is true (Selenium / Puppeteer / Playwright)
headlessHeadless BrowserHeadless Chrome / Phantom signature found
automationAutomation ToolAutomation framework variables found in the page
bot_uaBot User-AgentUser-Agent is empty or belongs to a bot / script
zero_viewportZero Window SizeWindow / screen dimensions are zero
no_pluginsNo Browser PluginsDesktop browser reports zero plugins
no_languagesNo Languagesnavigator.languages is empty
software_glSoftware RendererWebGL uses a software renderer (VM / headless)
chrome_missingFake ChromeUser-Agent says Chrome but window.chrome is missing
perm_mismatchPermission MismatchNotification permission state is inconsistent (headless)
touch_mismatchDevice MismatchMobile User-Agent without touch support (emulator)