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);
           }); 

      

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

  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/mdorg/p/10576941.html
Copyright © 2011-2022 走看看