2013-04-01 7 views
14

मैं Webview और JavascriptaddJavascriptInterface(true) बनाकर एंड्रॉइड वेब ऐप बना रहा हूं।वेबव्यू/जावास्क्रिप्ट का उपयोग कर एंड्रॉइड ऐप। सुरक्षा चिंता क्या हो सकती है?

मेरा ऐप डेटा (एचटीएमएल) सामग्री करेगा जो बाहरी साइट से लोड किया जाएगा।

मैं अपने ऐप के क्रॉस-साइट-स्क्रिप्टिंग XSS/सुरक्षा के बारे में चिंतित हूं क्योंकि मैं addJavascriptInterface (true) को सक्षम कर रहा हूं।

मुझे किस चीज की देखभाल करनी चाहिए ताकि मेरे ऐप पर कोई दुर्भावनापूर्ण कोड नहीं चलाना चाहिए?

उत्तर

14

4.212 से अधिक पुराने वेबव्यू में भेद्यता है जब आप इसके लिए जावास्क्रिप्ट सक्षम करें।

जावास्क्रिप्ट को सक्षम करने की

उपयोग:

एक बार JavaScript सक्षम हो, तो आप अपने आवेदन कोड और अपने जावा स्क्रिप्ट कोड के बीच इंटरफेस बना सकते हैं।

addJavascriptInterface (वस्तु वस्तु, स्ट्रिंग नाम) विधि:

addJavascriptInterface विधि WebView में एक आपूर्ति जावा वस्तु injects।

वस्तु को आपूर्ति किए गए नाम का उपयोग करके मुख्य फ्रेम के जावास्क्रिप्ट संदर्भ में इंजेक्शन दिया गया है और यह जावा ऑब्जेक्ट के जावास्क्रिप्ट से विधियों तक पहुंचने की अनुमति देता है।

एंड्रॉइड 4.1 या पुराने चलाने वाले अनुप्रयोगों के लिए, सभी सार्वजनिक विधियों (विरासत सहित) को एक्सेस किया जा सकता है, इसलिए जब उपयोगकर्ता के इंस्टॉल किए गए एप्लिकेशन addJavascriptInterface विधि के साथ एक बाहरी वेबपृष्ठ लोड करता है तो यह जावा ऑब्जेक्ट को कॉल करने के लिए वेबव्यू और जावास्क्रिप्ट का उपयोग कर सकता है (किसी अन्य अनियंत्रित जावा क्लास को आमंत्रित करने के लिए 'जावास्क्रिप्ट पाइपलाइन' और प्रतिबिंब के उपयोग की तरह) जो हमलावरों को एंड्रॉइड की जावा विधियों को कॉल करने की अनुमति देता है।

ठीक:

अनुप्रयोगों के लिए चल रहा है Android 4.2 सभी सार्वजनिक तरीकों कि JavascriptInterface से एनोटेट जावास्क्रिप्ट से पहुँचा जा सकता।

तो यदि आप एसडीके संस्करण 17 या उच्चतर के लिए कोई एप्लिकेशन विकसित करते हैं, तो आपको अपनी जावास्क्रिप्ट में उपलब्ध किसी भी विधि में @JavascriptInterface एनोटेशन जोड़ना होगा।

यदि आप एनोटेशन प्रदान नहीं करते हैं, तो एंड्रॉइड 4.2 या उसके बाद वाले संस्करण पर चलने पर विधि आपके वेब पेज द्वारा पहुंच योग्य नहीं है।

Reference

+1

एफवाईआई: नीचे दिया गया लिंक समस्या की गहराई पर चर्चा करता है। http://arstechnica.com/security/2013/09/attackers-can-slip-malicious-code-into-many-android-apps-via-open-wi-fi/। –

+0

मुझे लगता है कि आपका मतलब है, जब आप * जावास्क्रिप्ट इंटरफेस * जोड़ते हैं, तो यह प्रतिबिंब के माध्यम से मूल जावा सामग्री तक पहुंचने की क्षमता जोड़ता है। – NoBugs

+0

हाँ आप सही हैं। –

14

मैं सिरैक्यूज़ विश्वविद्यालय से एक अच्छा अध्ययन Attacks on WebView in the Android System कहा जाता है, जो कैसे addJavascriptInterface(true) के साथ एक WebView का उपयोग कर हमलों के दो प्रकार सक्षम कर सकते हैं दिखाता है पाया। एक, एक दुर्भावनापूर्ण वेबसाइट से अब आपके पास इंटरफ़ेस (जैसे संपर्क, कैमरा इत्यादि) या दो में दी गई फ़ोन सेवाओं के माध्यम से आपके ऐप तक पहुंच होगी, एक दुर्भावनापूर्ण ऐप को कोड को सम्मिलित करके, एक कमजोर वेबसाइट तक पहुंच हो सकती है इसकी जावास्क्रिप्ट।

मूल रूप से ऐप डेवलपर्स के लिए फ़िक्स यह सुनिश्चित करना है कि WebView में, किसी भी अन्य यूआरएल को आपके वेब व्यू में देखने की अनुमति नहीं है।उदाहरण के लिए, कहें कि आप अपने WebView में फेसबुक.com एम्बेड करते हैं, तो आप यह सुनिश्चित करने के लिए कोड लिख सकते हैं कि यदि फेसबुक में कोई अन्य विज्ञापन क्लिक किया गया है, तो बाहरी ब्राउज़र आपके WebView में प्रदर्शित होने के बजाय खुल जाएगा। यह iFrames के माध्यम से सबसे आम है ... हालांकि लेख इसके बारे में गहराई में जाता है।

यहाँ उदाहरण है वे प्रस्तुत करते है कि सुनिश्चित करता है कोई अन्य यूआरएल एक WebView एक मूल रूप से करना अलावा अन्य में देखा जाता है:

WebViewclient wvclient = New WebViewClient() { 
    // override the "shouldOverrideUrlLoading" hook. 
    public boolean shouldOverrideUrlLoading(WebView view,String url){ 
    if(!url.startsWith("http://www.facebook.com")){ 
    Intent i = new Intent("android,intent.action.VIEW", 
    Uri.parse(url)); 
    startActivity(i); 
    } 
} 
// override the "onPageFinished" hook. 
public void onPageFinished(WebView view, String url) { ...} 
} 
webView.setWebViewClient(wvclient); 

यह एक महान अध्ययन है, और हमलों की कई अलग अलग तरीकों की रूपरेखा। पढ़ने के लायक!

+0

इस पृष्ठ में उत्तर अधिक upvotes के लायक है। –

+0

श्वेतसूची वाले पृष्ठ में असुरक्षित सामग्री होने पर यह मिटम्स के खिलाफ सुरक्षा नहीं करेगा। – Antimony

0

मैं इस gist लिखा shouldOverrideUrlLoading लेकिन यह भी shouldInterceptRequest जो मेरा मानना ​​है कि AJAX प्रकार कॉल द्वारा किया जाता है अधिभावी द्वारा Android के वेब-दृश्य, @Noni एक के जवाब के लिए इसी तरह यह केवल श्वेतसूची यूआरएल के लिए लोड हो रहा है की अनुमति देता है नीचे ताला लगा के साथ मदद करने के लिए।

संबंधित मुद्दे