![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/private_html/ |
<?php
/**
* SHIELD CHALLENGE PAGE
*
* This page serves a JavaScript challenge to verify the visitor
* is using a real browser. It's designed to be fast and invisible
* to real users (just a brief loading screen).
*/
session_start();
require_once 'config/shield_config.php';
// If Shield is disabled, redirect back
if (!shield_is_enabled()) {
$return_url = $_SESSION['shield_challenge']['return_url'] ?? '/';
header('Location: ' . $return_url);
exit;
}
// Verify we have a valid challenge session
if (!isset($_SESSION['shield_challenge']) || !isset($_SESSION['shield_challenge']['token'])) {
header('Location: /');
exit;
}
$challenge = $_SESSION['shield_challenge'];
$token = $challenge['token'];
$challenge_time = $challenge['time'];
$return_url = $challenge['return_url'] ?? '/';
// Check if challenge is expired
if (time() - $challenge_time > SHIELD_CHALLENGE_TIMEOUT) {
unset($_SESSION['shield_challenge']);
header('Location: /');
exit;
}
// Generate puzzle for this challenge
$puzzle_a = rand(10, 99);
$puzzle_b = rand(10, 99);
$puzzle_answer = $puzzle_a + $puzzle_b;
// Store the expected answer
$_SESSION['shield_challenge']['puzzle_answer'] = $puzzle_answer;
$_SESSION['shield_challenge']['puzzle_time'] = microtime(true) * 1000; // milliseconds
// Log challenge served
require_once 'includes/shield.php';
shield_log('challenge_served', $_SERVER['REMOTE_ADDR'] ?? 'unknown', [
'token' => substr($token, 0, 8) . '...'
]);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex, nofollow">
<title>Verifying...</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
.container {
text-align: center;
padding: 2rem;
}
.spinner {
width: 50px;
height: 50px;
border: 3px solid rgba(102, 126, 234, 0.2);
border-top-color: #667eea;
border-radius: 50%;
animation: spin 0.8s linear infinite;
margin: 0 auto 1.5rem;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
h1 {
font-size: 1.5rem;
font-weight: 600;
margin-bottom: 0.5rem;
color: #667eea;
}
p {
font-size: 1rem;
color: #a0aec0;
}
.error {
display: none;
margin-top: 2rem;
padding: 1rem;
background: rgba(245, 101, 101, 0.1);
border: 1px solid rgba(245, 101, 101, 0.3);
border-radius: 8px;
color: #f56565;
}
noscript {
display: block;
padding: 2rem;
background: rgba(245, 158, 11, 0.1);
border: 1px solid rgba(245, 158, 11, 0.3);
border-radius: 8px;
color: #f59e0b;
text-align: center;
}
</style>
</head>
<body>
<noscript>
<h2>JavaScript Required</h2>
<p>Please enable JavaScript to continue to the website.</p>
</noscript>
<div class="container" id="challenge-container">
<div class="spinner"></div>
<h1>Verifying your browser</h1>
<p>This will only take a moment...</p>
<div class="error" id="error-message">
<p>Verification failed. <a href="/" style="color: #667eea;">Click here to try again</a></p>
</div>
</div>
<script>
(function() {
// Challenge data from server
const challengeToken = <?= json_encode($token) ?>;
const puzzleA = <?= $puzzle_a ?>;
const puzzleB = <?= $puzzle_b ?>;
const startTime = Date.now();
// Collect browser fingerprint (lightweight)
function getFingerprint() {
const data = [];
// Screen info
data.push(screen.width + 'x' + screen.height);
data.push(screen.colorDepth);
data.push(window.devicePixelRatio || 1);
// Timezone
data.push(Intl.DateTimeFormat().resolvedOptions().timeZone);
// Language
data.push(navigator.language);
// Platform
data.push(navigator.platform);
// Plugins count
data.push(navigator.plugins ? navigator.plugins.length : 0);
// Check for webdriver (bot indicator)
data.push(navigator.webdriver ? '1' : '0');
// Canvas fingerprint (simple)
try {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillStyle = '#f60';
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = '#069';
ctx.fillText('SoundStudioPro', 2, 15);
data.push(canvas.toDataURL().slice(-50));
} catch (e) {
data.push('canvas_error');
}
return data.join('|');
}
// Solve the puzzle
function solvePuzzle() {
return puzzleA + puzzleB;
}
// Check for bot indicators
function checkBotIndicators() {
const indicators = [];
// WebDriver
if (navigator.webdriver) {
indicators.push('webdriver');
}
// Headless Chrome detection
if (/HeadlessChrome/.test(navigator.userAgent)) {
indicators.push('headless');
}
// Missing plugins in Chrome
if (/Chrome/.test(navigator.userAgent) && navigator.plugins.length === 0) {
indicators.push('no_plugins');
}
// Phantom
if (window.callPhantom || window._phantom) {
indicators.push('phantom');
}
// Nightmare
if (window.__nightmare) {
indicators.push('nightmare');
}
// Selenium
if (document.documentElement.getAttribute('webdriver') ||
window.document.documentElement.getAttribute('driver')) {
indicators.push('selenium');
}
return indicators;
}
// Submit verification
function submitVerification() {
const solveTime = Date.now() - startTime;
const fingerprint = getFingerprint();
const puzzleAnswer = solvePuzzle();
const botIndicators = checkBotIndicators();
// Prepare data
const data = {
token: challengeToken,
answer: puzzleAnswer,
solve_time: solveTime,
fingerprint: fingerprint,
bot_indicators: botIndicators,
screen: {
width: screen.width,
height: screen.height,
ratio: window.devicePixelRatio || 1
},
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
language: navigator.language,
platform: navigator.platform,
cookie_enabled: navigator.cookieEnabled
};
// Send to verification endpoint
fetch('/shield_verify.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data),
credentials: 'same-origin'
})
.then(response => response.json())
.then(result => {
if (result.success) {
// Redirect to original destination
window.location.href = result.redirect || '/';
} else {
// Show error
document.getElementById('error-message').style.display = 'block';
console.error('Verification failed:', result.error);
}
})
.catch(error => {
document.getElementById('error-message').style.display = 'block';
console.error('Verification error:', error);
});
}
// Wait a minimum time before solving (too fast = bot)
// Real humans take at least 200-300ms to see the page
const minDelay = 300;
const elapsed = Date.now() - startTime;
const remaining = Math.max(0, minDelay - elapsed);
setTimeout(submitVerification, remaining);
})();
</script>
</body>
</html>