क्रॉस-ऐप्लिकेशन स्क्रिप्टिंग

OWASP कैटगरी: MASVS-CODE: कोड क्वालिटी

खास जानकारी

वेबव्यू, Android ऐप्लिकेशन में एम्बेड किया गया ब्राउज़र कॉम्पोनेंट है. इसकी मदद से, ऐप्लिकेशन में वेब कॉन्टेंट दिखाया जा सकता है. यह ऐप्लिकेशन के यूज़र इंटरफ़ेस में एचटीएमएल, सीएसएस, और JavaScript को रेंडर करता है.

क्रॉस-ऐप्लिकेशन स्क्रिप्टिंग, आम तौर पर किसी टारगेट किए गए ऐप्लिकेशन के संदर्भ में नुकसान पहुंचाने वाले कोड को चलाने से जुड़ी होती है. इस दस्तावेज़ के मकसद के लिए, विषय को खास तौर पर, नुकसान पहुंचाने वाले JavaScript कोड को कमजोर वेबव्यू में इंजेक्ट करने तक सीमित किया जाएगा.

जब कोई ऐप्लिकेशन, वेबव्यू में नुकसान पहुंचाने वाले JavaScript को बिना पुष्टि या साफ़ किए स्वीकार करता है, तो ऐप्लिकेशन को क्रॉस-ऐप्लिकेशन स्क्रिप्टिंग का खतरा हो सकता है.

असर

हमलावर के कंट्रोल होने पर, क्रॉस-ऐप्लिकेशन स्क्रिप्टिंग के जोखिमों का फ़ायदा उठाया जा सकता है JavaScript कॉन्टेंट को जोखिम की आशंका वाले ऐप्लिकेशन के वेबव्यू में बिना पुष्टि की गई या साफ़-सफ़ाई की गई है. इस वजह से, हमलावर का दिया गया JavaScript कोड, टारगेट किए गए ऐप्लिकेशन के वेबव्यू के संदर्भ में लागू किया जाता है. इसके बाद, नुकसान पहुंचाने वाला JavaScript कोड, टारगेट किए गए ऐप्लिकेशन की अनुमतियों का इस्तेमाल कर सकता है. इससे, उपयोगकर्ता का संवेदनशील डेटा चोरी हो सकता है और खाता हाइजैक हो सकता है.

जोखिम कम करने के तरीके

JavaScript बंद करना

अगर आपके ऐप्लिकेशन के लिए JavaScript की ज़रूरत नहीं है, तो इसे बंद करने से यह पक्का किया जा सकेगा कि यह आपके ऐप्लिकेशन के लिए खतरा न बन जाए:

Kotlin

// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings

// Disable JavaScript
webSettings.javaScriptEnabled = false

Java

// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);

अगर आपके ऐप्लिकेशन को JavaScript की ज़रूरत है, तो पक्का करें कि आपके पास किसी JavaScript को वेबव्यू को भेजा गया. वेबव्यू को आर्बिट्रेरी एक्ज़ीक्यूट करने की अनुमति न दें JavaScript के बारे में निर्देश पाने के लिए, अगले सेक्शन में दिशा-निर्देश देखें.

पक्का करें कि वेबव्यू में सिर्फ़ उम्मीद के मुताबिक कॉन्टेंट लोड किया गया हो

shouldOverrideUrlLoading(), loadUrl() या evaluateJavascript(), जैसे तरीकों का इस्तेमाल करते समय, पक्का करें कि उनमें भेजे गए सभी यूआरएल की जांच की गई हो. जैसा कि पहले बताया गया है, वेबव्यू को पास किया गया कोई भी JavaScript सिर्फ़ उम्मीद के मुताबिक डोमेन से आते हैं, इसलिए यह पुष्टि करना ज़रूरी है कि क्या लोड किया जा रहा है.

अच्छी सलाह और उदाहरणों के लिए, वेबव्यू के लिए OWASP का इनपुट की पुष्टि करने वाला दस्तावेज़ और Android की सुरक्षा से जुड़ी यह चेकलिस्ट देखें.

वेबव्यू के लिए फ़ाइल का सुरक्षित ऐक्सेस सेटिंग सेट करें

यह पक्का करना कि फ़ाइलें ऐक्सेस नहीं की जा सकतीं, आर्बिट्रेरी JavaScript को वेबव्यू के अंदर एक्ज़ीक्यूट किया जा रहा है.नीचे दिया गया WebSettings फ़ाइल का ऐक्सेस हासिल करते समय इन बातों पर ध्यान दिया जाता है:

  • फ़ाइल का ऐक्सेस बंद करें. एपीआई लेवल 29 और उससे पहले के वर्शन में, setAllowFileAccess डिफ़ॉल्ट रूप से True पर सेट होता है. इससे लोकल फ़ाइलों को ऐक्सेस करने की अनुमति मिलती है. एपीआई लेवल 30 और उसके बाद के वर्शन में, डिफ़ॉल्ट तौर पर False का इस्तेमाल किया जाता है. यह पक्का करने के लिए कि फ़ाइल का ऐक्सेस नहीं दिया गया है, setAllowFileAccess को False पर सेट करें
  • कॉन्टेंट का ऐक्सेस बंद करें. setAllowContentAccess की डिफ़ॉल्ट सेटिंग True है. कॉन्टेंट के यूआरएल का ऐक्सेस, वेबव्यू को सिस्टम में इंस्टॉल किए गए कॉन्टेंट प्रोवाइडर से कॉन्टेंट लोड करने की अनुमति देता है. अगर आपके ऐप्लिकेशन को कॉन्टेंट ऐक्सेस करने की ज़रूरत नहीं है, तो setAllowContentAccess को False पर सेट करें. इससे, क्रॉस-ऐप्लिकेशन स्क्रिप्टिंग अटैक के मामले में, संभावित गलत इस्तेमाल को रोका जा सकता है.

  • कोटलिन kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

  • Java java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false); अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

सुरक्षित ब्राउज़िंग की सुविधा चालू करना

AndroidManifest.xml में सुरक्षित ब्राउज़िंग की सुविधा चालू करें, ताकि वेबव्यू में भेजे गए यूआरएल को फ़िशिंग या नुकसान पहुंचाने वाले डोमेन के लिए स्कैन किया जा सके.:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

संसाधन