一、深夜的调试器
凌晨两点,Chrome开发者工具里堆满了红色的`403`和跳动的`setTimeout`。脚本跑到第三页就卡住,控制台突然冒出一行`window._cf_chl_opt`——又是Cloudflare。这不是普通的反爬,是带着五层验证的“套娃式”防御。我灌了口冷咖啡,意识到这次面对的ZLibrary,早不是当年那个直接返回HTML的静态站点。
二、防御体系的三个维度
ZLibrary的防护可以拆成三层。最外层是Cloudflare的托管防护,中间层是站点自身的动态验证逻辑,最内层是业务数据接口的令牌机制。这三层不是简单叠加,而是状态耦合的:你必须在通过外层验证时拿到正确的`cf_clearance`,这个Cookie会作为中间层会话的入场券,而中间层动态生成的`token`又决定了内层API会不会返回真实数据。
```javascript
// 模拟中间层token生成(逆向推测逻辑,非真实代码)
function generateToken(userAction) {
// 这里踩过坑:别直接复制浏览器里的Date.now()
// 服务器时间可能和本地有偏移,要用页面加载时下发的那个时间戳基准
const baseTime = window._pageLoadTimestamp;
const delta = Date.now() - baseTime;
// 关键在这里:鼠标轨迹的哈希值会混入token
const mouseHash = hashTrajectory(window._mousePath);
return btoa(`${userAction}:${delta}:${mouseHash}`);
}
```
最麻烦的是第二层。它不单单检查Cookie,还会注入一段混淆的JS来计算用户环境参数。这段代码每天变三次,里面塞满了无用的循环和字符串拆解操作,单纯用`requests`模拟

1478

被折叠的 条评论
为什么被折叠?



