zoukankan      html  css  js  c++  java
  • Electron-Node安全性问题之一

    上次开会项目开会提到了使用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({
         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);
           }); 

      

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

  • 相关阅读:
    Spring的声明试事务
    spring-AOP-添加日志
    弹窗插件
    工厂设计模式
    smartUpload组件批量下载
    简单的C++委托 —— 用模板类实现类成员函数的回调
    偷Microsoft师学MFC艺:且看C++如何支持反射
    C++中回调(CallBack)的使用方法
    epoll 使用实例
    C++成员函数指针的应用
  • 原文地址:https://www.cnblogs.com/mdorg/p/10576941.html
Copyright © 2011-2022 走看看