Electron-Node安全性问题之一

探讨了在Electron应用中禁用Node.js集成以增强安全性,预防XSS升级为RCE攻击的方法。通过预加载脚本来暴露API,实现Node.js特性的安全使用,并以新零售业务场景为例,展示了如何安全地利用serialport模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次开会项目开会提到了使用electron安全性的问题:

是否要禁用Node.js集成?是目前所要考虑的问题。

跨站脚本(XSS)攻击很常见,攻击者跳过渲染进程并在用户电脑上执行恶意代码,危害是非常大的。禁用Node.js集成有助于防止XSS攻击升级为“远程代码执行”(RCE)攻击。

怎么解决Node.js集成的问题?

当禁用Node.js集成时,你可以暴露API给你的站点,以使用Node.js的模块功能或特性。预加载脚本依然可以使用require等Node.js特性,以使开发者可以暴露自定义API给远程加载内容。

const mainWindow = new BrowserWindow({
  webPreferences: {   //网页功能的设置
    nodeIntegration: false, //是否完整的支持 node. 默认值为true
    nodeIntegrationInWorker: false,// 是否在Web工作器中启用了Node集成
    preload: './preload.js' //在页面运行其他脚本之前预先加载指定的脚本 无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径
  }
})

 

下面结合新零售业务,对于node – serialport怎么处理的?

Electron主进程:
mainWindow = new BrowserWindow({
    width: 800, 
    height: 600,
    webPreferences: {
        nodeIntegration: false,
     nodeIntegrationInWorker: false
        preload: path.join(__dirname, 'preload.js')
    }
})
暴露API给站点(preload.js):
const serialport = require('serialport');
let nav = {	
	serialport:serialport
}
global.nav = nav;
站点(web业务)要使用的:
     const contr = document.getElementById('port')
	const serialport = window.nav.serialport;
	if(!serialport) return;
        serialport.list((err, ports) => {
             for (let item of ports) {
		     var div = document.createElement('div')
		     div.innerHTML = item.comName
                     contr.appendChild(div)
             }
             console.log(ports);
       }); 

  

在项目中遇到的具体问题就是如此,这里做下项目总结。后续会持续记录。

转载于:https://www.cnblogs.com/mdorg/p/10576941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值