WebSocket握手验证反爬虫

!WebSocket 反爬虫-LMLPHP

HTTP协议

请求头

服务器端创建 socket 服务后监听客户端,使用 while True 的方式读取客户端发送的消息

然后对服务器端发送的握手请求进验证,如果验证通过,则返回状态码为 101 的响应头,否则返回状态码为 403 的响应头

WebSocket 反爬虫-LMLPHP

WebSocket 消息校验反爬虫

握手成功之后,双端就可以开始互推消息了

WebSocket 只需要完成 1 次握手,就可以保持长期连接,在后续的消息互发阶段是不需要用到 HTTP 协议的

其实消息互发阶段也是可以对客户端身份进行校验的,这是因为客户端所获取的消息是有服务器端主动推动的

如果服务器端不主动推送,那么客户端就无法获取信息

可以在服务器端新增一个逻辑:握手结束后客户端发送特定的消息,服务器端对该消息进行校验,校验通过则将服务器端的数据推送给客户端,否则不做处理

如果我们将客户端发送的新消息修改为数据仓库中没有的键,那么服务器端就不会给客户端推送消息

WebSocket 反爬虫-LMLPHP

WebSocket Ping 反爬虫

总结

信息校验主要解决了客户端身份鉴别、数据来源判断和请求的合法性判断等问题,避免数据接收者使用被篡改过得数据,保证数据的有效性

无论是 HTTP 协议还是 WebSocket 协议,都需要对客户端身份进行鉴别,信息校验无疑是最合适的方法

WebSocket 反爬虫的产生跟协议规范有很大的关联,由于协议中的一些规范并不是强制实现的,所以开发者可以在服务器端与客户端握手和消息互传的过程叫做验证

04-20 20:52