You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除jetty-websocket的CVE-2017-7657/CVE-2017-7658高危漏洞?

修复Jetty WebSocket高危漏洞及类替换方案

核心思路:升级到Jetty 9.x系列的WebSocket实现

Jetty 8.x属于停止维护的老旧版本,官方未修复该批次漏洞,必须迁移到Jetty 9.3+版本的WebSocket组件——该版本已彻底修复CVE-2017-7657和CVE-2017-7658。Jetty 9.x对WebSocket模块做了拆分重构,需要同步替换依赖包和调整导入类。

1. 替换项目依赖

Maven项目操作

移除原Jetty 8.x的WebSocket依赖,添加Jetty 9.3.24.v20180605对应的组件:

<!-- 移除旧版依赖 -->
<!-- <dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-websocket</artifactId>
    <version>8.1.1.v20120215</version>
</dependency> -->

<!-- 新增Jetty 9.3.x WebSocket核心依赖 -->
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-server</artifactId>
    <version>9.3.24.v20180605</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-client</artifactId>
    <version>9.3.24.v20180605</version>
</dependency>

Gradle项目操作

// 移除旧版依赖
// compile 'org.eclipse.jetty:jetty-websocket:8.1.1.v20120215'

// 新增Jetty 9.3.x WebSocket核心依赖
compile 'org.eclipse.jetty.websocket:websocket-server:9.3.24.v20180605'
compile 'org.eclipse.jetty.websocket:websocket-client:9.3.24.v20180605'

2. 替换导入类及代码适配

Jetty 9.x的WebSocket API与8.x差异较大,核心类的包路径和调用逻辑有明显变化,以下是常见类的替换映射:

旧Jetty 8.x导入类新Jetty 9.x对应类
org.eclipse.jetty.websocket.WebSocketorg.eclipse.jetty.websocket.api.WebSocketAdapter 或 org.eclipse.jetty.websocket.api.WebSocketListener
org.eclipse.jetty.websocket.WebSocket.Connectionorg.eclipse.jetty.websocket.api.Session
org.eclipse.jetty.websocket.WebSocket.OnTextMessage实现WebSocketListener的onWebSocketText方法,或继承WebSocketAdapter重写该方法
org.eclipse.jetty.websocket.WebSocket.OnBinaryMessage实现WebSocketListener的onWebSocketBinary方法,或继承WebSocketAdapter重写该方法
org.eclipse.jetty.websocket.server.WebSocketHandlerorg.eclipse.jetty.websocket.server.WebSocketHandler(包路径不变,但内部API逻辑调整)

代码调整示例

原Jetty 8.x代码:

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocket.Connection;

public class MyWebSocket implements WebSocket.OnTextMessage {
    private Connection connection;

    @Override
    public void onOpen(Connection connection) {
        this.connection = connection;
    }

    @Override
    public void onMessage(String data) {
        connection.sendMessage("Received: " + data);
    }

    @Override
    public void onClose(int closeCode, String message) {
        // 关闭逻辑
    }
}

替换为Jetty 9.x代码:

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.WebSocketAdapter;

public class MyWebSocket extends WebSocketAdapter {
    @Override
    public void onWebSocketText(String data) {
        Session session = getSession();
        if (session.isOpen()) {
            session.getRemote().sendString("Received: " + data);
        }
    }

    @Override
    public void onWebSocketClose(int statusCode, String reason) {
        super.onWebSocketClose(statusCode, reason);
        // 关闭逻辑
    }
}

3. 适配Guacamole项目的WebSocket集成

针对guacamole-client项目,需要额外做以下检查:

  • 确认自定义WebSocket处理器全部完成API替换
  • 验证Guacamole核心WebSocket组件(如GuacamoleWebSocketTunnelEndpoint)的兼容性,若存在冲突需同步调整其导入和调用逻辑
  • 运行单元测试和集成测试,确保WebSocket隧道的连接、数据传输等核心功能正常

4. 漏洞修复验证

完成所有调整后:

  • 重新运行安全检测工具,确认CVE-2017-7657和CVE-2017-7658漏洞已消除
  • 手动覆盖WebSocket连接的各类场景,确保无功能回归

内容的提问来源于stack exchange,提问作者gstackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:28:10