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

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 पर ध्यान देना चाहिए:

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

  • kotlin 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" />

संसाधन