mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 21:15:32 +09:00
fix(desktop): verify privileged ipc senders (#2360)
This commit is contained in:
1 parent
de2ea99928
commit
a53f5d1289
6 files changed
+56
-9
No files matched your search
@@ -0,0 +1,35 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {isTrustedOrigin} from '@electron/main/Window';
|
||||
import type {IpcMainInvokeEvent} from 'electron';
|
||||
|
||||
export class UntrustedRendererDocumentSenderError extends Error {
|
||||
public constructor(channel: string) {
|
||||
super(`${channel} is only reachable from a trusted top-level renderer document`);
|
||||
this.name = 'UntrustedRendererDocumentSenderError';
|
||||
}
|
||||
}
|
||||
|
||||
function isPrivilegedRendererDocumentSender(event: IpcMainInvokeEvent): boolean {
|
||||
const frame = event.senderFrame;
|
||||
if (frame == null) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
if (frame.detached) {
|
||||
return false;
|
||||
}
|
||||
if (frame.parent != null) {
|
||||
return false;
|
||||
}
|
||||
return isTrustedOrigin(frame.url);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function requirePrivilegedRendererDocumentSender(event: IpcMainInvokeEvent, channel: string): void {
|
||||
if (!isPrivilegedRendererDocumentSender(event)) {
|
||||
throw new UntrustedRendererDocumentSenderError(channel);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user