PageSourceSearch

https://www.prlib.ru/challenge-ru.html?redirect=/search

html prlib.ru collected 2026-10-01 10:19:57 UTC 5,644 bytes, 166 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4    <meta charset="UTF-8">
5    <title>Проверка безопасности</title>
6    <style>
7        * {
8            margin: 0;
9            padding: 0;
10            box-sizing: border-box;
11        }
12        body {
13            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
14            display: flex;
15            justify-content: center;
16            align-items: center;
17            min-height: 100vh;
18            background: #f6f6f6;
19            color: #333;
20        }
21        .challenge-box {
22            background: white;
23            padding: 40px;
24            border-radius: 8px;
25            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
26            text-align: center;
27            max-width: 400px;
28            width: 90%;
29        }
30        .spinner {
31            border: 3px solid #f3f3f3;
32            border-top: 3px solid #3498db;
33            border-radius: 50%;
34            width: 40px;
35            height: 40px;
36            animation: spin 1s linear infinite;
37            margin: 20px auto;
38        }
39        @keyframes spin {
40            0% { transform: rotate(0deg); }
41            100% { transform: rotate(360deg); }
42        }
43        h1 {
44            font-size: 20px;
45            margin-bottom: 10px;
46            color: #2c3e50;
47        }
48        p {
49            font-size: 14px;
50            color: #7f8c8d;
51            margin-top: 10px;
52        }
53        .progress-container {
54            margin-top: 20px;
55        }
56        .progress-bar {
57            width: 100%;
58            height: 4px;
59            background: #ecf0f1;
60            border-radius: 2px;
61            overflow: hidden;
62        }
63        .progress-fill {
64            height: 100%;
65            background: #3498db;
66            width: 0%;
67            animation: fillProgress 5s linear forwards;
68        }
69        @keyframes fillProgress {
70            to { width: 100%; }
71        }
72    </style>
73</head>
74<body>
75    <div class="challenge-box">
76        <h1>Проверка безопасности</h1>
77        <div class="spinner"></div>
78        <p>Проверяем ваш браузер перед доступом к сайту</p>
79        <div class="progress-container">
80            <div class="progress-bar">
81                <div class="progress-fill"></div>
82            </div>
83        </div>
84        <p style="margin-top: 15px; font-size: 12px;">
85            Это займет несколько секунд
86        </p>
87    </div>
88
89    
89<script>
90        (function() {
91            'use strict';
92            
93            const startTime = performance.now();
94            const minWaitTime = 3000 + Math.random() * 2000;
95            
96            function performChecks() {
97                const checks = {
98                    navigator: typeof navigator !== 'undefined',
99                    window: typeof window !== 'undefined',
100                    document: typeof document !== 'undefined',
101                    localStorage: typeof localStorage !== 'undefined',
102                    sessionStorage: typeof sessionStorage !== 'undefined',
103                    canvas: typeof HTMLCanvasElement !== 'undefined',
104                    webgl: typeof WebGLRenderingContext !== 'undefined',
105                    webdriver: navigator.webdriver === undefined,
106                    plugins: navigator.plugins.length > 0,
107                    languages: navigator.languages && navigator.languages.length > 0
108                };
109                
110                if (window.phantom || window.callPhantom || window.__nightmare) {
111                    return false;
112                }
113                
114                if (navigator.webdriver) {
115                    return false;
116                }
117                
118                if (!checks.navigator || !checks.window || !checks.document) {
119                    return false;
120                }
121                
122                return true;
123            }
124            
125            function generateToken() {
126                const data = {
127                    ts: Date.now(),
128                    ua: navigator.userAgent.substring(0, 100),
129                    lang: navigator.language,
130                    tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
131                    screen: window.screen.width + 'x' + window.screen.height,
132                    rand: Math.random().toString(36)
133                };
134                return btoa(JSON.stringify(data));
135            }
136            
137            function completeChallenge() {
138                if (!performChecks()) {
139                    document.querySelector('.challenge-box').innerHTML = 
140                        '<h1 style="color: #e74c3c;">Доступ запрещен</h1>' +
141                        '<p>Ваш браузер не прошел проверку безопасности.</p>';
142                    return;
143                }
144                
145                const elapsed = performance.now() - startTime;
146                const remaining = Math.max(minWaitTime - elapsed, 100);
147                
148                setTimeout(function() {
149                    const token = generateToken();
150                    
151                    document.cookie = 'challenge_token=' + token + 
152                        '; path=/; max-age=3600; SameSite=Lax';
153                    
154                    const params = new URLSearchParams(window.location.search);
155                    const redirect = params.get('redirect') || '/en/';
156                    window.location.href = redirect;
157                }, remaining);
158            }
159            
160            completeChallenge();
161        })();
162    </script>
162
163</body>
164</html>
165
166

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.