为了安全起见,我需要禁止webpack捆绑的第三方模块使用 window.postMessage
与我的Electron应用程序中的其他进程通信。
这可能吗?
一个标准的技巧可能会有帮助:简单地将该方法移到window的另一个变量中,也许像这样。
window._postMessage = window.postMessage;
window.postMessage = () => {};
首先在你的渲染脚本中运行这个方法,或者使用 <script>
标签,而使用该标签的插件则无法再发送事件(事实上,它们不会崩溃,但永远不会得到响应)。
编辑
如果你想确保只有授权的用户才能使用它,类似这样的方法就可以了。
function createSecurePostMessage() {
const _postMessage = window.postMessage;
return {
get() {return function(...args) {
if (isAuthorized(...args) {
_postMessage(...args);
}
}
}
}
window.postMessage = createSecurePostMessage().get();
现在原来的postMessage在函数内部,无法访问 你可以实现一个方法,例如,检查某个消息是否可以发送。如果有人再次调用create,那么这个有保障的postMethod就只是再次被 "保障 "了。