【发布时间】:2020-09-09 21:30:40
【问题描述】:
出于安全原因,我需要禁止 webpack 包含在我的包中的第 3 方模块使用 window.postMessage 与我的 Electron 应用程序中的其他进程进行通信。
这可能吗?
【问题讨论】:
标签: security webpack electron node-modules
出于安全原因,我需要禁止 webpack 包含在我的包中的第 3 方模块使用 window.postMessage 与我的 Electron 应用程序中的其他进程进行通信。
这可能吗?
【问题讨论】:
标签: security webpack electron node-modules
一个标准的技巧可以在这里提供帮助:只需将方法移动到窗口上的另一个变量,就像这样:
window._postMessage = window.postMessage;
window.postMessage = () => {};
首先在您的渲染脚本上运行它,或者在您的 html 和插件上使用 <script> 标记,这些插件将无法再发送事件(事实上,它们不会崩溃但永远不会得到响应)。
编辑
如果你想确保只有授权用户可以使用它,这样的事情可能会起作用:
function createSecurePostMessage() {
const _postMessage = window.postMessage;
return {
get() {return function(...args) {
if (isAuthorized(...args) {
_postMessage(...args);
}
}
}
}
window.postMessage = createSecurePostMessage().get();
现在原始的 postMessage 在函数内部并且无法访问,您可以实现一个方法,例如,检查是否可以发送某个消息。如果有人再次调用 create,那么受保护的 postMethod 将再次被“保护”。
【讨论】:
delete window.postMessage。