上次開會項目開會提到了使用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);
});
在項目中遇到的具體問題就是如此,這里做下項目總結。后續會持續記錄。
