很多网站接入百度统计等统计工具后,经常会出现后台被刷广告的问题,大量无效数据不仅干扰运营分析,还可能带来安全风险。通过加密统计相关的JS代码,可以有效隐藏真实逻辑,避免被恶意脚本识别利用,以下是具体的实现方法。

核心实现思路
加密的核心是把原本明文暴露的统计代码逻辑进行混淆、加密处理,只有在页面加载时通过解密函数还原出真实代码再执行,这样恶意脚本抓取到的只是加密后的字符串,无法直接调用统计接口。
常规未加密统计代码的问题
普通的百度统计代码是直接暴露在页面中的,如下是标准明文代码:
// 未加密的百度统计代码
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?your_site_id";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();这段代码直接写明了统计接口的地址和站点ID,很容易被恶意脚本识别并模拟调用,进而实现刷量刷广告。
加密实现步骤
- 第一步:将统计代码转为字符串,使用Base64等方式加密,同时可以加入简单的字符替换逻辑增加破解难度
- 第二步:编写解密函数,在页面加载时自动执行解密逻辑,还原出真实的统计代码字符串
- 第三步:通过
eval或者动态创建脚本的方式执行还原后的统计代码,确保统计功能正常工作
完整加密代码示例
以下是整合了加密、解密和执行的完整代码,你可以直接替换自己的站点ID后使用:
// 加密后的统计代码字符串,这里是将原始统计代码Base64编码后得到的示例,实际使用时替换成你自己的加密串
var encryptedCode = "dmFyIF9obXQgPSBfhm10IHx8IFtdOwooZnVuY3Rpb24oKSB7CiAgdmFyIGhtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgbm0uc3JjID0gImh0dHBzOi8vaG0uYmFpZHUuY29tL2htLmpzP3lvdXJfc2l0ZV9pZCI7CiAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07IAogIHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaG0sIHMpOwp9KSgpOw==";
// 解密函数,这里使用Base64解码,实际可以根据需要增加更复杂的混淆逻辑
function decryptCode(str) {
// Base64解码逻辑
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
var output = '';
var i = 0;
str = str.replace(/[^A-Za-z0-9\+\/\=]/g, '');
while (i < str.length) {
var enc1 = chars.indexOf(str.charAt(i++));
var enc2 = chars.indexOf(str.charAt(i++));
var enc3 = chars.indexOf(str.charAt(i++));
var enc4 = chars.indexOf(str.charAt(i++));
var chr1 = (enc1 << 2) | (enc2 >> 4);
var chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
var chr3 = ((enc3 & 3) << 6) | enc4;
output += String.fromCharCode(chr1);
if (enc3 != 64) {
output += String.fromCharCode(chr2);
}
if (enc4 != 64) {
output += String.fromCharCode(chr3);
}
}
return output;
}
// 页面加载完成后执行解密并运行统计代码
window.onload = function() {
var realCode = decryptCode(encryptedCode);
// 执行还原后的代码
eval(realCode);
};部署注意事项
- 加密后的代码建议不要直接放在页面头部,可以放在页面底部或者按需加载,进一步降低被识别的概率
- 可以定期更换加密逻辑和加密串,避免恶意脚本适配固定的加密规则
- 部署后需要测试统计功能是否正常,确认数据能够正常上报到百度统计后台
- 如果需要同时防护其他统计后台,只需要把对应统计的明文代码先加密,再整合到解密后的执行逻辑中即可
注意:这种加密方式属于前端层面的基础防护,能够应对大部分自动化刷量脚本,如果是针对性的高级攻击,还需要结合服务端IP频率限制、验证码校验等方式共同防护。
其他统计后台适配
如果你的网站还接入了其他统计工具,只需要把对应的统计代码按相同的方式加密后,和百度统计的代码合并加密即可,以下是合并加密的示例逻辑:
// 合并后的多统计代码明文,替换成你自己的百度统计和其他统计的ID
var combineCode = `
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?your_baidu_id";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
// 其他统计代码,比如Google Analytics
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'your_ga_id', 'auto');
ga('send', 'pageview');
`;
// 将combineCode进行Base64编码后得到加密串,替换到之前的encryptedCode变量中即可