收口HostBridge方法白名单门禁
移动壳配置检查拒绝共享契约外HostBridge method分发 桌面壳配置检查校验Rust method白名单与共享契约一致 更新原生壳方案和共享决策记录
This commit is contained in:
@@ -333,6 +333,17 @@ function extractStringArrayExport(source, exportName) {
|
||||
return entries;
|
||||
}
|
||||
|
||||
function extractRustStringArrayConst(source, constName) {
|
||||
const match = source.match(
|
||||
new RegExp(`const ${constName}[^=]*= \\[([\\s\\S]*?)\\];`),
|
||||
);
|
||||
if (!match) {
|
||||
throw new Error(`unable to read Rust const ${constName}`);
|
||||
}
|
||||
|
||||
return [...match[1].matchAll(/"([^"]+)"/g)].map((entry) => entry[1]);
|
||||
}
|
||||
|
||||
function extractDesktopCapabilities(source) {
|
||||
const match = source.match(/fn capabilities\(\)[^{]*\{[\s\S]*?vec!\[([\s\S]*?)\]\s*\}/);
|
||||
if (!match) {
|
||||
@@ -441,8 +452,14 @@ const sharedCapabilities = extractStringArrayExport(
|
||||
sharedContractSource,
|
||||
'HOST_BRIDGE_CAPABILITIES',
|
||||
);
|
||||
const sharedMethods = extractStringArrayExport(
|
||||
sharedContractSource,
|
||||
'HOST_BRIDGE_METHODS',
|
||||
);
|
||||
const desktopMethods = extractRustStringArrayConst(main, 'HOST_BRIDGE_METHODS');
|
||||
const desktopCapabilities = extractDesktopCapabilities(main);
|
||||
const sdkBackedCapabilities = ['auth.requestLogin', 'payment.request'];
|
||||
assertSameList(desktopMethods, sharedMethods, 'desktop shell HostBridge method whitelist');
|
||||
const unknownDesktopCapabilities = desktopCapabilities.filter(
|
||||
(capability) => !sharedCapabilities.includes(capability),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user