Skip to content

Commit 4236884

Browse files
author
lemon
committed
在执行接口粒度的安全检查之前,先执行全局的安全检查
1 parent 0332cb1 commit 4236884

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

easybridge/src/main/java/easily/tech/easybridge/lib/EasyBridge.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import android.text.TextUtils;
66
import android.webkit.JavascriptInterface;
77
import android.webkit.ValueCallback;
8-
import android.webkit.WebView;
98

109
import com.google.gson.Gson;
1110
import com.google.gson.GsonBuilder;
@@ -36,11 +35,11 @@ private static class CallBackHandler extends Handler {
3635
private Map<String, BridgeHandler> registerHandlerMap;
3736
private Map<String, ResultCallBack> jsCallbackMap;
3837
private CallBackHandler callBackHandler;
39-
private SoftReference<WebView> bridgeWebView;
38+
private SoftReference<EasyBridgeWebView> bridgeWebView;
4039
private String bridgeName;
4140
private static long uniqueId = 1;
4241

43-
EasyBridge(WebView webView, String bridgeName) {
42+
EasyBridge(EasyBridgeWebView webView, String bridgeName) {
4443
this.bridgeName = bridgeName;
4544
registerHandlerMap = new HashMap<>();
4645
jsCallbackMap = new HashMap<>();
@@ -74,6 +73,12 @@ public void onResult(Object result) {
7473
callBack.onResult(CallBackMessage.generateErrorMessage(CallBackMessage.CODE_NO_HANDLER, "handler with name " + handlerName + " is not registered in Java code"));
7574
return;
7675
}
76+
// global security check
77+
if (!checkGlobalSecurity(currentPageUrl, parameters)) {
78+
callBack.onResult(CallBackMessage.generateErrorMessage(CODE_SECURITY_FORBIDDEN, "handler with name " + handlerName + " is not allowed to invoke in page:" + currentPageUrl + " by the global Security Checker"));
79+
return;
80+
}
81+
// handler security check
7782
if (handler.securityPolicyChecker() != null && !handler.securityPolicyChecker().check(currentPageUrl, parameters)) {
7883
callBack.onResult(CallBackMessage.generateErrorMessage(CODE_SECURITY_FORBIDDEN, "handler with name " + handlerName + " is not allowed to invoke in page:" + currentPageUrl));
7984
return;
@@ -173,6 +178,15 @@ private BridgeHandler findTargetHandler(String handlerName) {
173178
return null;
174179
}
175180

181+
private boolean checkGlobalSecurity(String url, String parameters) {
182+
//can not reach the policyChecker,return true directly
183+
if (bridgeWebView == null || bridgeWebView.get() == null || bridgeWebView.get().policyChecker == null) {
184+
return true;
185+
}
186+
SecurityPolicyChecker checker = bridgeWebView.get().policyChecker;
187+
return checker.check(url, parameters);
188+
}
189+
176190
void registerHandler(BridgeHandler handler) {
177191
if (handler == null || TextUtils.isEmpty(handler.getHandlerName())) {
178192
return;

0 commit comments

Comments
 (0)