收口HostBridge方法白名单门禁
移动壳配置检查拒绝共享契约外HostBridge method分发 桌面壳配置检查校验Rust method白名单与共享契约一致 更新原生壳方案和共享决策记录
This commit is contained in:
@@ -133,6 +133,17 @@ function extractStringConstExport(source, exportName) {
|
||||
return match[1];
|
||||
}
|
||||
|
||||
function extractMobileBridgeHandledMethods(source) {
|
||||
const match = source.match(
|
||||
/async function handleRequest\(request: HostBridgeRequest\)[^{]*\{[\s\S]*?switch \(request\.method\) \{([\s\S]*?)\n \}/,
|
||||
);
|
||||
if (!match) {
|
||||
throw new Error('unable to read mobile shell HostBridge handler methods');
|
||||
}
|
||||
|
||||
return [...match[1].matchAll(/case '([^']+)':/g)].map((entry) => entry[1]);
|
||||
}
|
||||
|
||||
function assertNoBlockedMobileChannelDependencies(packageJson, packageLabel) {
|
||||
const dependencySections = [
|
||||
'dependencies',
|
||||
@@ -260,6 +271,11 @@ const sharedCapabilities = extractStringArrayExport(
|
||||
sharedContractSource,
|
||||
'HOST_BRIDGE_CAPABILITIES',
|
||||
);
|
||||
const sharedMethods = extractStringArrayExport(
|
||||
sharedContractSource,
|
||||
'HOST_BRIDGE_METHODS',
|
||||
);
|
||||
const handledMobileMethods = extractMobileBridgeHandledMethods(bridgeSource);
|
||||
const mobileCapabilities = extractStringArrayExport(
|
||||
bridgeSource,
|
||||
'MOBILE_HOST_CAPABILITIES',
|
||||
@@ -271,6 +287,15 @@ const iosMobileCapabilities = extractStringArrayExport(
|
||||
const mobileCapabilitySet = new Set(mobileCapabilities);
|
||||
const iosMobileCapabilitySet = new Set(iosMobileCapabilities);
|
||||
const sdkBackedCapabilities = ['auth.requestLogin', 'payment.request'];
|
||||
const unknownHandledMobileMethods = handledMobileMethods.filter(
|
||||
(method) => !sharedMethods.includes(method),
|
||||
);
|
||||
if (unknownHandledMobileMethods.length > 0) {
|
||||
throw new Error(
|
||||
`mobile shell handles unknown HostBridge methods: ${unknownHandledMobileMethods.join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
const unknownMobileCapabilities = mobileCapabilities.filter(
|
||||
(capability) => !sharedCapabilities.includes(capability),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user