2012-09-17 18 views
11

से भेजे गए इंटरसेप्ट HTTP अनुरोध मेरे पास एप्लिकेशन है। मैं सभी यूआरएल, पैरामीटर, http-request प्रकार इत्यादि जानता हूं (यह मेरा आवेदन है)।एंड्रॉइड ऐप

मैं एप्लिकेशन से सभी अनुरोधों को कैसे रोक सकता हूं? उदाहरण के लिए - मैंने एक बटन दबाया और सर्वर के अनुरोधों का पाठ देख सकता है।

कार्य - संभावित हैकर से अनुरोध छुपाने और उसे आवेदन की ओर से अनुरोध करने से रोकने के लिए।

+0

मैं संभावित हैकर्स से छिपाने के अनुरोध के लिए https या अन्य एन्क्रिप्शन का उपयोग करने का प्रस्ताव करता हूं। –

+0

हाँ, मुझे https के बारे में पता है – monyag

उत्तर

0

जहां तक ​​मैं समझता हूँ, अपने प्रश्न दोनों समस्याओं के होते हैं:

कैसे अपने सर्वर और अपने ग्राहक के बीच यातायात का निरीक्षण करने के लिए।

  • लॉगिंग:

    बढ़ती प्रयास के साथ कई संभावनाएं हैं तुम सिर्फ http अनुरोध लागू करने से पहले प्रवेश आपकी क्वेरी से युक्त और बयानों पैरामीटर डाल सकता है यह आपके आवेदन है।

  • सर्वर-साइड सुनना: जैसा कि यह आपका एप्लिकेशन है, आप सर्वर के नियंत्रण में भी हैं। tcpdump जैसे उपकरणों के साथ आप सिर्फ यातायात डंप और यह lateron का विश्लेषण करने में सक्षम होना चाहिए (उदाहरण के लिए Wireshark के साथ)
  • सुनकर क्लाइंट-साइड: यदि आप "के बगल में" ग्राहक आप की कोशिश कर सकते में ट्रैफ़िक अवरोधित करना चाहते हैं या तो प्रॉक्सी का उपयोग करके या सीधे अपने वाईफ़ाई में यातायात को रोकने के लिए burpsuite का उपयोग करना।

यह सुनिश्चित करने के लिए कि केवल आपके ग्राहक सर्वर पर अनुरोध कर सकते हैं। मैं क्लाइंट प्रमाणीकरण के साथ https का उपयोग करने की सलाह दूंगा। आपको अपने ऐप के साथ क्लाइंट-सर्टिफिकेट रोल करना होगा और फिर आपका सर्वर आपके क्लाइंट की प्रामाणिकता की जांच कर सकता है। Here आप पारस्परिक एसएसएल प्रमाणीकरण के लिए एक सामान्य परिचय पा सकते हैं।

0

आप वास्तव में क्यों नहीं स्पष्ट करते हैं आप इसे अपने प्रश्न में क्यों कर रहे हैं, लेकिन दूसरों के लिए: ऐसा करने के लिए सबसे अच्छा प्रेरक कारण यह होगा क्योंकि आप डरते थे कि आपका ऐप हमलावर का लक्ष्य था क्योंकि उन्होंने किसी भी तरह से आपके इरादे (या अन्य आरपीसी इंटरफ़ेस) को गलत व्यवहार करने के लिए मजबूर किया था।

यह करने का सबसे अच्छा तरीका यह है कि मैं ऐसा करने के लिए कह सकता हूं: अपने ऐप पर सीमित इंटरफ़ेस पेश करना है: सार्वजनिक ऐप या आरपीसी इंटरफेस को अपने ऐप में हेरफेर करने की अनुमति न दें जो आपको नहीं चाहिए।

इसके अतिरिक्त, आप सर्वर पर भेजे गए HTTP अनुरोधों को रूट कर सकते हैं (शायद आपके ऐप में एक रैपर के माध्यम से HTTP सुविधाओं में)। सवाल यह है कि, जब आपके पास क्लाइंट के डिवाइस पर जानकारी दर्ज हो जाती है, तो आप पर इसके साथ क्या कर रहे हैं। जब ऐप कुछ "बुरा" कर रहा है, तो सही ढंग से पहचानने में सक्षम होने के नाते, यह बहुत खराब है, और "बुरा" की परिभाषा को पूर्ववत करता है, इसलिए यह आगे बढ़ने के लिए गलत रास्ता है।

तो यदि आप लॉग कर सकते हैं, और यहां तक ​​कि यदि आप एचटीटीपीएस का उपयोग कर सकते हैं, तो भी मैं कहूंगा कि आपको उन सभी मार्गों की जांच करनी चाहिए जिन पर हमलावर आपके ऐप में डेटा भेजने के लिए आपके ऐप में हेरफेर करने के लिए उपयोग कर सकता है: कहां से शुरू करें आप वास्तव में डेटा भेजते हैं और ऐप के माध्यम से पीछे अपना रास्ता काम करते हैं!

0

WebViewClient विस्तार, मैं विधि overrode shouldOverrideUrlLoading इस प्रकार है:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    String mainPage = "https://www.secureSite.com/myData/"; 

    if (url.startsWith(mainPage)) { 
     view.loadUrl(url); 
     return false; 

    } else { 

     //some dialog building code here 

     view.stopLoading(); 
     return false; 
    } 
} // end-of-method shouldOverrideUrlLoading 

तो इस कोड की बात है कि यह प्रत्येक यूआरएल, जो आपके ऐप्लिकेशन लोड हो रहा है शुरू होता है का मूल्यांकन करता है। यदि कोई उपयोगकर्ता कोई लिंक ढूंढता है या अपना यूआरएल लोड करने का प्रयास करता है जो आपके डोमेन/निर्दिष्ट यूआरएल का हिस्सा नहीं है, तो यह मेल नहीं खाएगा और लोड नहीं होगा।

लेकिन आपके एंड्रॉइड मेनिफेस्ट में, आपको android:exported विशेषता false पर सेट करना चाहिए ताकि अन्य अनुप्रयोगों का उपयोग करने से रोका जा सके। here से नीचे

उद्धरण:

एंड्रॉयड: निर्यात अन्य अनुप्रयोगों के घटकों सेवा शुरू करने या इसे साथ बातचीत कर सकते हो या न हो - अगर वे कर सकते हैं "सही", और "गलत" अगर नहीं। जब मान "झूठा" होता है, तो उसी उपयोगकर्ता आईडी के साथ एक ही एप्लिकेशन या एप्लिकेशन के केवल घटक ही सेवा शुरू कर सकते हैं या उससे जुड़ सकते हैं।

डिफ़ॉल्ट मान इस बात पर निर्भर करता है कि सेवा में इरादे फ़िल्टर हैं या नहीं। किसी भी फ़िल्टर की अनुपस्थिति का अर्थ है कि इसे केवल अपने सटीक वर्ग के नाम को निर्दिष्ट करके ही बुलाया जा सकता है। इसका तात्पर्य यह है कि सेवा केवल आवेदन-आंतरिक उपयोग के लिए है (क्योंकि दूसरों को कक्षा का नाम नहीं पता होगा)। तो इस मामले में, डिफ़ॉल्ट मान "झूठा" है। दूसरी तरफ, कम से कम एक फ़िल्टर की उपस्थिति का तात्पर्य है कि सेवा बाहरी उपयोग के लिए है, इसलिए डिफ़ॉल्ट मान "सत्य" है।

यह विशेषता अन्य अनुप्रयोगों के लिए किसी सेवा के संपर्क को सीमित करने का एकमात्र तरीका नहीं है। आप बाहरी संस्थाओं को सीमित करने की अनुमति का भी उपयोग कर सकते हैं जो सेवा के साथ बातचीत कर सकते हैं (अनुमति विशेषता देखें)।

यह विशेषता Activity और Provider में भी उपयोग की जा सकती है। Here (गतिविधि) और here (प्रदाता) संदर्भ है, लेकिन यह Service विवरण के समान शब्द के लिए बहुत अधिक शब्द है, या Provider को Service के लिए प्रतिस्थापित करें।

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