2011-12-19 16 views
8

अगर मैं एक दूरस्थ सर्वर से सत्यापन ऑफलोड, मुझे लगता है कि इस प्रक्रिया की तरह कुछ हो जाएगा:एंड्रॉयड एप्लिकेशन के तहत बिलिंग सत्यापन

Android Market     Application  Remote Server 
     |--------IN_APP_NOTIFY------->|    | 
     |        |-----nonce----->| 
     |        |<----nonce------| 
     |<-GET_PURCHASE_STATE_CHANGED-|    | 
     |---PURCHASE_STATE_CHANGED--->|    | 
     |        |--verification->| 
     |        |<-verification--| 

अगर मैं सही ढंग से समझ, अस्थायी रूप से पुनरावृत्ति हमले भेद्यता और सत्यापन को कम करना है स्पूफिंग भेद्यता को कम करना है। साथ ही, दस्तावेज़ों को सुरक्षा प्रसंस्करण को ऑफ़लोड करने का कारण यह है कि सत्यापन चरण को मेरे सार्वजनिक एंड्रॉइड मार्केट प्रकाशक की कुंजी तक पहुंच की आवश्यकता होती है और रिमोट सर्वर का लक्ष्य मेरे कोड में शामिल/गणना करने की आवश्यकता से कहा जाता है।

पहला सवाल, क्या दूरस्थ सर्वर के लिए गैर-पीढ़ी/जांच करने का कोई सुरक्षा कारण है? सत्यापन चरण को दबाकर सही तरीके से किया जाता है, अगर संदेश को धोखा दिया गया तो हम दूरस्थ सर्वर से पता लगाएंगे। तो मुझे ऐसा लगता है कि किसी भी व्यक्ति को IN_APP_NOTIFY को पुन: प्रसारित करने के लिए नॉन बस है।

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

तीसरा सवाल, क्या मेरे पास मेरे रिमोट सर्वर से सत्यापन सत्यापित करने की कोशिश करने वाली सभी समस्याएं नहीं हैं (उदाहरण के लिए एप्लिकेशन में मेरे रिमोट सर्वर पर सार्वजनिक कुंजी संग्रहीत करना)?

चौथा प्रश्न, अगर मैं इस खरीद सत्यापन के परिणामों को फोन पर संग्रहीत करना चाहता हूं तो यह अतिरिक्त सुरक्षा है (यानी मैं किसी भी उपयोगकर्ता को अनलॉक सामग्री की खरीद स्थिति को सत्यापित नहीं करना चाहता हूं सामग्री का उपयोग करता है)?

+0

हाय, मैंने ऐप-ऐप बिलिंग शुरू करने के बाद सभी प्रश्नों में भाग लिया है। मुझे लगता है कि जिस आरेख के साथ आप आए थे वह सही है (जहां तक ​​मैं इसे अब समझता हूं)। क्या आपने दिसंबर से कोई अन्य अंतर्दृष्टि प्राप्त की है? – user291701

उत्तर

10

पहला सवाल, क्या दूरस्थ सर्वर के लिए गैर-पीढ़ी/जांच करने का कोई सुरक्षा कारण है?

हां, सर्वर को नॉन उत्पन्न करना चाहिए, और चेक करना चाहिए। एक सामान्य नियम के रूप में, सर्वर से लगभग हर जगह सुरक्षा-संबंधित होना चाहिए। एक नॉन एक "संख्या केवल एक बार उपयोग की जाती है"। तो, सर्वर के लिए सही चीज है:

  1. एक गैर-उत्पन्न और सहेजना।
  2. एक उत्तर प्राप्त करें।
    • यदि उत्तर में सहेजे गए nonce हैं, तो हस्ताक्षर जांचें और इसे संसाधित करें। नॉन्रेस कमाएं।
    • यदि उत्तर में एक सहेजे गए nonce है, तो यह संभवतः एक निर्मित/प्रतिकृति है, इसलिए त्यागें।

दूसरा सवाल है, यह क्यों फर्क पड़ता है अगर हमारी सार्वजनिक कुंजी एक शाब्दिक स्ट्रिंग है?

यदि आप किसी सर्वर पर अपना काम करते हैं, तो पूरी तरह से अप्रासंगिक, यदि आप किसी सर्वर पर अपना काम करते हैं तो पूरी तरह अप्रासंगिक है।

यदि आप एप्लिकेशन में सुरक्षा करते हैं, तो सुरक्षा को बाईपास करने के लिए एप्लीकेशन को हैक किया जा सकता है। एक तकनीक सार्वजनिक कुंजी को बदलना है, अगर यह एक स्ट्रिंग के रूप में सहेजा जाता है तो यह आसान होता है।

तीसरा सवाल, क्या मेरे पास मेरे रिमोट सर्वर से सत्यापन सत्यापित करने की कोशिश करने वाली सभी समस्याएं नहीं हैं (उदाहरण के लिए एप्लिकेशन में मेरे रिमोट सर्वर पर सार्वजनिक कुंजी संग्रहीत करना)?

नहीं आप नहीं करेंगे। कोई भी सर्वर के कोड को एक्सेस/बदल नहीं सकता है। कम से कम "आसान" के रूप में अनुप्रयोग में कर सकते हैं।

चौथा सवाल, अगर मैं फोन पर इस खरीद सत्यापन के परिणामों को संग्रहीत करना चाहता हूं तो यह अतिरिक्त सुरक्षा है (यानी मैं अनलॉक सामग्री की खरीद स्थिति को सत्यापित नहीं करना चाहता हूं उपयोगकर्ता सामग्री का उपयोग करता है)?

अच्छा, यह निर्भर करता है।

"securest" जिस तरह से एक सर्वर होने ऐप्लिकेशन के अंतर्गत खरीदी को लागू करने का अर्थ है:

  • आप सर्वर में अपने "खरीद-" सामग्री को बचाने के। यदि कोई उपयोगकर्ता इसे खरीदता है, तो आप इसे एप्लिकेशन पर डाउनलोड करते हैं, और आप इसे किसी अन्य फोन पर "कॉपी" करने के लिए कठिन तरीके से सहेजते हैं। सर्वर से
  • , केवल सत्यापन प्रक्रिया को सर्वर में सही तरीके से किया जाता है, तो केवल सामग्री भेजें।
  • अनुप्रयोग से, यदि आपको कोई "सहेजी गई" सामग्री नहीं पता है, तो "लेनदेन पुनर्स्थापित करें" ऑपरेशन करें, और फिर सर्वर से आपको जो कुछ भी चाहिए उसे डाउनलोड करें।
  • Google play की इन-ऐप खरीदारियां आसानी से सामग्री प्रदान करने के लिए डिज़ाइन नहीं की गई हैं, इसे केंद्रीकृत साइट से खरीदारी करने के लिए डिज़ाइन किया गया है और इसलिए उपयोगकर्ता के लिए आसान है। हम डेवलपर्स इसका उपयोग करने के लिए बहुत सारे काम के साथ खत्म होते हैं।
+0

चौथे प्रश्न के लिए @atridas अंक में जोड़ना यह है कि यदि आप इन-ऐप बिलिंग संस्करण 2 का उपयोग कर रहे हैं और अनगिनत उत्पाद हैं तो आपको किसी उपयोगकर्ता द्वारा की गई सभी खरीद के रिकॉर्ड बनाए रखना चाहिए, लेकिन यदि आपके पास प्रबंधित उत्पाद हैं तो Google इस रखरखाव का ख्याल रखेगा रिकॉर्ड का और आप सीधे स्थानीय डिवाइस पर अपनी खरीद कर सकते हैं लेकिन सुरक्षा कारणों से इसकी अनुशंसा नहीं की जाती है। – Ankit

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