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

  

在項目中遇到的具體問題就是如此,這里做下項目總結。后續會持續記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM