mPaaS 建议所有的 JSAPI 访问都需要添加访问控制,目前可以通过设置 Plugin 的方式添加访问控制。
设置自定义权限控制 Plugin。
自定义 Plugin,监听 JSAPI 调用的事件,进行拦截处理。
在 Plugin 中拦截到事件后,获取当前页面的 URL,建议根据 host、scheme 进行字符串匹配校验。
@interface MPPlugin4WebView : NBPluginBase @end @implementation MPPlugin4WebView - (void)pluginDidLoad { self.scope = kPSDScope_Scene; // -- 拦截调用的jsapi信息 [self.target addEventListener:kEvent_Invocation_Event_Start withListener:self useCapture:NO]; [self.target addEventListener:kEvent_Invocation_Invoke withListener:self useCapture:NO]; [super pluginDidLoad]; } - (void)handleEvent:(PSDEvent *)event { [super handleEvent:event]; if([kEvent_Invocation_Event_Start isEqualToString:event.eventType] || [kEvent_Invocation_Invoke isEqualToString:event.eventType]){ PSDInvocationEvent *invocationEvent = (PSDInvocationEvent *)event; NSString *apiName = invocationEvent.invocationName; NSDictionary *data = invocationEvent.invocationData; // 获取到当前页面的url,根据scheme和host进行字符串匹配校验 NSURL *url = event.context.currentViewController.url; if (![url.host isEqualToString:@"xxx"] || ![url.scheme isEqualToString:@"xxx"]) { [event preventDefault]; [event stopPropagation]; return; } } } - (int)priority { return PSDPluginPriority_High+1; }
重要URL 要进行精准匹配,至少要匹配到 URI 类的 scheme 和 host 信息,慎用或不用正则匹配,严格避免使用 contains、startsWith、endsWith、indexOf 等不精准函数。
注册 Plugin。
在 mPaaS 容器初始化时,指定自定义 Plugin 的路径。
在自定义 Plugin 的 bundle 的 plist 文件中,注册上一步的 Plugin。详情请参考 注册 Plugin。