Closed PurpleNoon closed 8 months ago
如图所示,preload.ts 的 sendSendMsgResult 可被渲染端调用执行来发送任意的消息
preload.ts
sendSendMsgResult
安全提示来源:electron 文档进程间通信中提到的安全警告 2. 通过预加载脚本暴露 ipcRenderer.send
或许可以采用以下这种方式来规避这个问题?(只是个人建议) 图中红框部分代码: MessageGroup.ts
MessageGroup.ts
const msg = await sendIPCMsgAsync<MessageElement, Data>( CHANNEL_HANDLE_SINGLE_MESSAGE, CHANNEL_BACK_SINGLE_MESSAGE, oriMessage )
IPCSend.ts
export interface SendIPCMsgSession<T> { id: string data: T } export function sendIPCMsgAsync<T, V>( channelTo: string, channelBack: string, data: T ) { return new Promise<V>((resolve) => { const onceSessionId = `${channelTo}____${uuid4()}` const handler = (event: any, result: SendIPCMsgSession<V>) => { if (result.id === onceSessionId) { resolve(result.data) ipcMain.off(channelBack, handler) return } } ipcMain.on(channelBack, handler) sendIPCMsg(channelTo, { id: onceSessionId, data, }) }) }
// 感觉 sendSendMsgResult 的实现不安全,因此更改了实现方式 handleSingleMessage: (callback: (session: SendIPCMsgSession<MessageElement>) => void) => { ipcRenderer.on( CHANNEL_HANDLE_SINGLE_MESSAGE, (_event, value) => callback(value) ) }, backSingleMessage: <T>(data: T) => { ipcRenderer.send( CHANNEL_BACK_SINGLE_MESSAGE, data ) },
感谢提醒,可以提个PR,现在在逐步脱离LLAPI,以后不会在renderer进行NTQQ API的相关操作了
唔,明天我看看怎么提 pr,提到 main 还是 dev?看你最近的提交好像没提到 dev 上
到dev吧,现在dev已经和main同步
如图所示,
preload.ts
的sendSendMsgResult
可被渲染端调用执行来发送任意的消息安全提示来源:electron 文档进程间通信中提到的安全警告 2. 通过预加载脚本暴露 ipcRenderer.send
或许可以采用以下这种方式来规避这个问题?(只是个人建议) 图中红框部分代码:
MessageGroup.ts
IPCSend.ts
preload.ts