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

如何在Electron应用中禁用网络功能?

Electron离线应用禁用网络连接的实现方案

该需求完全可以实现,可通过以下多层级的配置完成防护,避免应用发起任何对外网络请求:

1. 主进程全局拦截所有网络请求

通过Electron的webRequestAPI拦截所有会话的网络请求,仅放行本地文件协议的资源加载,其余全部阻断:

const { app, session } = require('electron')
const path = require('path')

app.whenReady().then(() => {
  session.defaultSession.webRequest.onBeforeRequest((details, callback) => {
    // 仅允许本地静态资源加载,其他所有网络请求直接取消
    if (details.url.startsWith('file://')) {
      callback({ cancel: false })
    } else {
      callback({ cancel: true })
    }
  })
})

2. 禁用所有网络相关权限与API

2.1 全局拒绝权限请求

关闭所有非必要的权限申请入口,避免地理位置、媒体设备等需要联网的权限被调用:

session.defaultSession.setPermissionRequestHandler((webContents, permission, callback) => {
  // 所有权限默认拒绝,如有本地需要的权限可单独加白名单放行
  callback(false)
})

2.2 渲染进程层面禁用网络API

通过preload脚本删除浏览器原生提供的所有网络调用接口,防止渲染层代码发起请求:
preload.js文件内容:

window.addEventListener('DOMContentLoaded', () => {
  // 批量删除网络相关API
  delete window.fetch
  delete window.XMLHttpRequest
  delete window.WebSocket
  delete window.EventSource
  delete navigator.sendBeacon
  delete navigator.geolocation
})

创建窗口时正确配置webPreferences,避免绕过限制:

const mainWindow = new BrowserWindow({
  width: 800,
  height: 600,
  webPreferences: {
    preload: path.join(__dirname, 'preload.js'),
    // 关闭渲染进程的Node权限,防止直接调用Node网络模块
    nodeIntegration: false,
    contextIsolation: true,
    enableRemoteModule: false,
    // 禁用webview标签,避免绕过主进程拦截规则
    webviewTag: false
  }
})

3. 额外加固措施

  • 禁用Electron内置的自动更新模块autoUpdater,移除所有需要联网的内置功能
  • 打包前校验所有第三方依赖,排除自带联网逻辑的依赖包
  • 可配合系统级防火墙规则,给打包后的应用程序添加禁止联网的全局规则,做双重防护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:07