讲师中心 微信公众号
AI工具推荐 视频效率加速

Workerman4WebSocket 协议校验,非法 websocket 握手直接拒绝连接

轻伟小哥_6911

轻伟小哥_6911

发布时间:2026-10-04 10:23:49

|

954人浏览过

|

来源于php中文网

原创

Workerman 默认不自动拒绝非法WebSocket握手,需在onConnect中手动校验Upgrade、Connection、Sec-WebSocket-Key、Origin、Host等头字段并主动close;禁用错误输出以防响应污染导致隐式失败。

workerman4websocket 协议校验,非法 websocket 握手直接拒绝连接

Workerman 默认对 WebSocket 握手有基础协议校验,但不会自动拒绝所有非法握手——它依赖你显式配置和主动拦截。若想在握手阶段就拦截不合规请求(比如缺少 Upgrade 头、Sec-WebSocket-Key 格式错误、非 websocket 协议升级等),需手动介入 onConnect 回调或使用中间件逻辑,在 HTTP 请求解析完成但连接尚未升级前做判断。

关键校验点必须手动实现

Workerman 的 Worker 启动为 websocket:// 时,会自动处理 RFC 6455 握手流程,包括生成 Sec-WebSocket-Accept,但它不会主动拒绝以下常见非法情况:

  • 请求头中 Upgrade 值不是小写 websocket(如 WebSocket、WEBSOCKET 或缺失)
  • Connection 头不含 Upgrade(大小写敏感,不能是 upgrade 或 keep-alive, upgrade 以外的组合)
  • Sec-WebSocket-Key 为空、长度不对(必须是 24 字节 Base64 编码)、含非法字符
  • 请求方法不是 GET,或 URI 不符合预期(如要求固定路径 /ws,但客户端访问了 /api)

如何在握手前拦截并拒绝

Workerman 并未暴露“握手前钩子”,但可通过以下方式在连接建立初期精准干预:

WebSocket 8.18.2
WebSocket 8.18.2

WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。

下载
  • 在 onConnect 回调中,用 $connection->getRemoteIp() 和 $connection->context->request(需开启 http 解析)获取原始请求对象
  • 若使用 WebServer + Worker 混合模式,可在 onMessage 前检查 $connection->isWebsocketConnection === false,说明握手未成功,此时可 $connection->close()
  • 更可靠的做法:改用 HttpServer 监听,自己解析请求头,对非法握手直接返回 400 Bad Request 并关闭连接,不交由 WebSocket 层处理
  • 示例片段(在 onConnect 中):
    <?php
    if (!$connection->isWebsocketConnection) {
        $connection->close();
        return;
    }
    // 继续校验 Sec-WebSocket-Key 等字段
    $key = $connection->context->request->header['sec-websocket-key'] ?? '';
    if (empty($key) || strlen(base64_decode($key, true)) !== 16) {
        $connection->close();
        return;
    }

    Origin 和 Host 校验也得自己加

    Workerman 不做跨域 Origin 校验,默认放行所有来源。若需拒绝非法来源的握手请求:

    • 读取 $connection->context->request->header['origin']
    • 比对白名单域名(注意:空 Origin 或 file:// 场景也要考虑)
    • 不匹配时调用 $connection->close(),不要等进入 onMessage
    • Host 头校验同理,尤其在 Nginx 反代后,$host 可能被覆盖,需结合 X-Forwarded-Host 判断

    避免响应体污染导致隐式失败

    即使你写了 return 或 exit,只要在握手响应已发送后还输出任何内容(如 warning、BOM、echo),浏览器就会判定握手失败,且不报错。务必做到:

    • 所有校验逻辑放在 onConnect 尽早位置
    • 禁用 PHP 错误显示:ini_set('display_errors', 'Off')
    • 确保没有意外的 var_dump、print_r 或日志写入到标准输出
    • 用抓包工具(如 Wireshark 或浏览器 Network 面板)确认是否真返回了 101 Switching Protocols

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
Golang WebSocket与实时通信开发
Golang WebSocket与实时通信开发

本专题系统讲解 Golang 在 WebSocket 开发中的应用,涵盖 WebSocket 协议、连接管理、消息推送、心跳机制、群聊功能与广播系统的实现。通过构建实际的聊天应用或实时数据推送系统,帮助开发者掌握 如何使用 Golang 构建高效、可靠的实时通信系统,提高并发处理与系统的可扩展性。

175

2025.12.22

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

396

2026.01.19

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

655

2026.03.18

WebSocket 前端开发与实战技巧
WebSocket 前端开发与实战技巧

聚焦 WebSocket 在前端项目中的工程化实践,涵盖原生 JavaScript WebSocket 连接的封装与状态管理、Vue 3 中 WebSocket 的 Composable 封装(useWebSocket)、React 中自定义 Hook 管理连接生命周期、心跳检测(Ping/Pong 定时器)与自动断线重连的实现策略、指数退避重连算法、消息序列化协议(JSON / Protobuf / MessagePack)的选型与性

408

2026.05.25

WebSocket发送和接收数据教程合集
WebSocket发送和接收数据教程合集

本专题整合了WebSocket发送与接收数据教程合集,阅读专题下面的文章了解更多详细内容。

301

2026.05.25

Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

166

2026.05.20

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

202

2026.05.20

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

187

2026.05.20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

60

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn