flawopen.com/Android WebView सुरक्षा/addJavascriptInterface
Android addJavascriptInterface: जोखिम और सुरक्षित उपयोग
addJavascriptInterface वाले WebView को विशेषाधिकार वाली सीमा मानें। Android इस object को हर frame में inject करता है और app यह नहीं पहचान सकता कि किस frame ने method बुलाया। यदि हमलावर-नियंत्रित JavaScript किसी frame तक पहुँच जाए, तो वह app की permissions से exposed methods बुला सकती है। Bridge वाले WebView में केवल app-नियंत्रित सामग्री रखें और अविश्वसनीय पेज को बिना bridge वाले अलग WebView में खोलें।
Bridge से XSS का असर क्यों बदलता है
Bridge JavaScript को host app में बुलाए जा सकने वाले entry points देता है। Android object को iframe सहित सभी frames में expose करता है और addJavascriptInterface caller frame का origin नहीं जाँचता। इसलिए injected script annotated bridge methods तक पहुँच सकती है; आगे की क्षमता उन methods और app के authorization checks पर निर्भर करती है। target API 16 या उससे कम वाले apps के लिए Android अधिक गंभीर legacy behavior बताता है: सभी public methods expose हो सकते हैं। API 17 से @JavascriptInterface आवश्यक है, पर यह annotation अविश्वसनीय सामग्री को सुरक्षित नहीं बनाता।
Bridge को अविश्वसनीय पेज से अलग रखें
webView.addJavascriptInterface( NativeBridge(), "Android" ) webView.loadUrl(untrustedUrl)
// यह WebView app द्वारा नियंत्रित bundled UI के लिए है। trustedWebView.settings.javaScriptEnabled = true trustedWebView.addJavascriptInterface( NativeBridge(), "Android" ) trustedWebView.loadUrl("file:///android_asset/index.html") // दूसरा WebView remote या user-controlled पेज संभालता है। untrustedWebView.removeJavascriptInterface("Android") untrustedWebView.settings.javaScriptEnabled = false // HTTPS और स्पष्ट host allowlist दोनों जाँचें। untrustedWebView.loadUrl(validatedHttpsUrl)
सबसे मजबूत सीमा architecture से आती है: bridge वाले WebView को remote, user-generated या हमलावर-प्रभावित पेज पर navigate न करें। यदि अविश्वसनीय सामग्री लोड करना आवश्यक हो, तो लोड से पहले interface हटाएँ और अलग WebView में JavaScript बंद रखें, जब तक इसकी जरूरत न हो। Android के अनुसार injected object सभी frames में उपलब्ध होता है और interface हटाने का असर अगले page load के बाद होता है। HTTPS transport सुरक्षित करता है; इससे host या सामग्री विश्वसनीय नहीं बनती। URL का scheme और host जाँचें और allowlist से बाहर के links system browser में खोलें। Bridge methods सीमित रखें, हर argument validate करें और caller page पर भरोसा करने के बजाय native code में authorization लागू करें।
Android WebView bridge सुरक्षा के आम सवाल
नहीं। API 17+ exposure को @JavascriptInterface वाले public methods तक सीमित करता है; यह caller frame का origin नहीं जाँचता और हमलावर-नियंत्रित सामग्री को विश्वसनीय नहीं बनाता। Bridge केवल उस WebView में रखें जो app-नियंत्रित सामग्री लोड करता हो।
संदर्भ
- Android Developers — WebView native bridge के जोखिम और बचाव
- Android Developers — WebView.addJavascriptInterface API संदर्भ
- Android Developers — JavascriptInterface API संदर्भ