2012-05-09 12 views
5

हां, मैंने सभी डेवलपर्स @ developer.android.com पढ़े हैं और मैं इसे एक मूल अपवाद के साथ समझता हूं - इसके लिए क्या पेश किया गया था।एंड्रॉइड इनएप बिलिंग - वास्तव में क्या बेकार हैं?

चूंकि Google Play से सभी ऑर्डर प्रतिक्रियाएं अप्राप्य-द्वारा-किसी भी निजी कुंजी द्वारा हस्ताक्षरित होती हैं और सार्वजनिक सार्वजनिक कुंजी (बाहरी सर्वर पर मेरे मामले में, इसलिए यह तीसरे व्यक्ति के लिए भी पहुंच योग्य नहीं है) द्वारा सत्यापित किया जा रहा है (लगभग) धोखा देने का कोई रास्ता नहीं है।

उन सभी nonces खरीद को सुरक्षित करने के लिए केवल अनावश्यक तरीका हैं।

  1. मैं कोई आइटम खरीदने;: और क्या अधिक है, डॉक्स जब स्थिति, के बारे में कुछ भी नहीं कहने
  2. गैर उत्पन्न करें और इसे Google Play पर भेजें;
  3. एक क्रैश है, इसलिए मेरे सभी ज्ञात nonces खो गए हैं;
  4. क्या मेरा ऐप पुनरारंभ हुआ है और Google Play से कॉलबैक मिला है;
  5. ... और इस कॉल को अस्वीकार न करने के कारण अस्वीकार करें!

ऊपर वर्णित स्थिति में उपयोगकर्ता एक आइटम के लिए भुगतान करता है और इसे कभी नहीं मिलता है, यह शर्मनाक क्या है। निस्संदेह मैं कुछ फाइलों में nonces स्टोर कर सकता हूं और जब मेरा ऐप वापस आता है तो इसे फिर से पढ़ सकता है, लेकिन यह nonces के सभी सिद्धांतों का उल्लंघन करता है।

IMHO किसी ने अभी कहा "अरे, सत्यापन प्रक्रिया बहुत सरल है, चलिए यादृच्छिकता के साथ कुछ और जोड़ते हैं, यह और अधिक शांत होगा!"। तो किसी ने किया।

या, क्या आप मेरे दिमाग को किसी अन्य उपयोग के मामले में खोलेंगे-क्या मुझे याद आ रही है? अन्यथा मैं अपने कोड से पूरे nonces भाग को हटा रहा हूँ।

+0

है याद वहाँ हमेशा खरीद बहाल करने की क्षमता है , जो उपयोगकर्ताओं को कभी भी चाहिए यदि वे कभी भी 1. एक नया डिवाइस प्राप्त करें, 2. फ़ैक्टरी को डिवाइस को रीसेट करना होगा। – weston

+0

आप सही हैं, मैं उनके बारे में भूल गया क्योंकि मेरे पास कोई नहीं है, लेकिन यह nonces से कैसे जुड़ा हुआ है? –

+0

बस आपका "उपयोगकर्ता किसी आइटम के लिए भुगतान करता है और इसे कभी नहीं प्राप्त करता है" यदि आप प्रबंधित खरीदारी का उपयोग करते हैं तो परिदृश्य कोई समस्या नहीं है, इसलिए उस मामले में नॉन खोने के बारे में चिंता करने की आवश्यकता नहीं है। मैं दावा नहीं कर रहा हूं कि यह एक जवाब है, बस एक टिप्पणी! – weston

उत्तर

2

आप कोई ऐप्लिकेशन दुर्घटना के लिए खाते में करने के लिए 'डिस्क पर' अस्थायी रूप से संग्रहीत करने के लिए की जरूरत नहीं है देखते हैं।

जब आपका ऐप हाँ दुर्घटनाग्रस्त हो जाता है तो आप ज्ञात नर्सों की अपनी सूची खो देंगे। हालांकि जब आपका ऐप पुनरारंभ होता है और आपको IN_APP_NOTIFY प्राप्त होता है तो आपको GET_PURCHASE_INFORMATION करना पड़ता है जब आप यह GET_PURCHASE_INFORMATION करते हैं तो आप एक नया नॉन उत्पन्न करेंगे और इसे गैर-ज्ञात सूची में जोड़ देंगे।

आपको क्या याद रखना है यह गैर GET_PURCHASE_INFORMATION (जो आपको कई खरीदे गए आइटम लौटाता है) खरीदा जाता है, जो खरीदे गए प्रति आइटम में से एक नहीं है।

के रूप में आप जो बोलते हैं उसे आप अपने खुद के रास्ते से खेलना हमलों से बचने के लिए लागू किया गया है, लेकिन खरीद में कामयाब रहे हैं, तो एक अस्थायी रूप से उपयोग करते हुए एक बार इस तरह के सुरक्षित विधि

+1

अच्छा, धन्यवाद, मुझे लगता है कि आपने बैल की आंख को मारा है। यदि आप कुछ और अद्वितीय नहीं देखते हैं तो गैर-जवाबों को उत्तर हमले से निपटने के कई तरीकों में से एक माना जाना चाहिए - i। ई। जेएसओएन में ऑर्डर आईडी (जो आईएमएचओ बेहतर है)। मेरे मामले में वे बेकार हैं, यद्यपि। –

0

आपको उत्पन्न करने से पहले जेनरेट नॉन को सहेजना चाहिए। एंड्रॉइड ऐप्स किसी भी बिंदु पर क्रैश या बंद हो सकते हैं, इसलिए सामान्य रूप से सबकुछ बचाया जाना चाहिए।

nonces का उपयोग करने का कारण prevent replay attacks है। मैं जवाब देने के लिए योग्य हूं कि नॉन का उपयोग करना चाहे या नहीं, लेकिन मुझे लगता है कि यह एक कारण के लिए है।

+1

मैं उन्हें स्मृति में सहेज रहा हूं, उन्हें स्थानीय डिस्क पर सहेजने से उन्हें दूसरों को पढ़ने/नकली/जो कुछ भी पढ़ने के लिए उजागर किया जाता है। मुझे जवाब हमलों के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि जैसा कि मैंने उल्लेख किया है कि असममित कुंजी मेरे लिए पर्याप्त सुरक्षित हैं, यह सुनिश्चित करने के लिए कि किसी के द्वारा कुछ भी खराब नहीं हुआ है। –

+0

"डिस्क पर" दृश्य सुरक्षा बिंदु से "स्मृति में" से अलग नहीं है। यदि आपका फोन रूट है तो ऐप्स को दोनों तक पहुंच होगी। यदि रूट नहीं किया गया है तो उन्हें या तो पहुंच प्राप्त करने के लिए सुरक्षा बग का फायदा उठाना होगा। – richardwiden

+0

क्या आप अपने उपयोगकर्ताओं को यह कहना चाहते हैं कि _THINK_ कि _YOUR_ दृष्टिकोण सुरक्षित है _ENOUGH_? – richardwiden

0

कल्पना करें कि आपका उपयोगकर्ता $ 100 कहने के लिए एक आइटम खरीदता है। आपके ऐप को अधिसूचित किया गया है कि भुगतान डेटा उपलब्ध है, ऐप डेटा और ऐपस्टोर के उत्तर को PURCHASE_STATE_CHANGED के साथ अनुरोध करता है। उपयोगकर्ता ऐपस्टोर से संदेश (!) रिकॉर्ड करता है और इसे सहेजता रहता है।

बाद में, उपयोगकर्ता आपके ऐप पर एक अधिसूचना लेता है, यह बताता है कि भुगतान डेटा उपलब्ध है (कोई भी नकली कर सकता है, क्योंकि इस अधिसूचना पर हस्ताक्षर नहीं है)। ऐप सोचता है "ओह, अरे, हो सकता है कि मैंने अभी खरीदा और मेरे उपयोगकर्ता द्वारा खरीदी गई खरीद के बारे में सारी जानकारी खो दी! चलो देखते हैं कि ऐपस्टोर को क्या कहना है"। तो यह ऐप स्टोर से डेटा का अनुरोध करता है। उपयोगकर्ता उस अनुरोध को बाधित करता है और आपके ऐप पर पहले दर्ज संदेश भेजता है। ऐप संदेश देखता है, इसे सत्यापित करता है और पाते हैं कि यह मान्य है (क्योंकि यह हस्ताक्षरित है और सभी)। तो ऐप आपको एक और मूल्यवान $ 100 आइटम देगा। और दुसरी। जैसे ही उपयोगकर्ता रिकॉर्ड किए गए संदेश को दोहराता है। इसलिए कहा जाता है: एक replay हमला।

हालांकि एक ऐसी चीज है जो इस तरह के हमले को रोकती है: नॉन। यदि आपका ऐप भुगतान डेटा के अनुरोध में एक nonce भेजता है, तो यह PURCHASE_STATE_CHANGED उत्तर में वही गैर प्राप्त करने की अपेक्षा करता है। एक नॉन के रूप में केवल एक बार उपयोग किया जाता है, आप पहले दर्ज किए गए संदेशों को फिर से नहीं चला सकते हैं, क्योंकि वे अनुरोध में उपयोग किए गए गैर-मिलान से मेल नहीं खाते हैं।

+0

यह बिल्कुल ऐसा नहीं है। जिस योजना को आपने पेश किया है वह ठीक है, लेकिन यह अभी भी दिखाता नहीं है कि किसके लिए nonces हैं - मुझे जवाब हमले के रूप में ऐसी समस्या से अवगत है, लेकिन मैं इसे अन्य तरीकों से सौदा करता हूं - मैं Google Play प्रतिक्रिया पर बहुत खुश हूं मेरा बाहरी सर्वर, जहां मैं अपनी सार्वजनिक कुंजी रखता हूं। और भी, इस तरह की स्थिति से बचने के लिए, मैंने हर बार ऐसा किया है कि मैं अद्वितीय ऑर्डर बचाता हूं जो कि हस्ताक्षरित JSON में आता है - इसे फिक नहीं किया जा सकता है, क्योंकि यह हस्ताक्षरित है और इसकी गारंटी अद्वितीय है। मैं बस एक ही आदेश के साथ दूसरे संदेश को अनदेखा कर रहा हूँ आईडी। ऐसा लगता है कि nonces वास्तव में बेकार हैं (और भी - हानिकारक जैसा कि मैंने कहा है)। –

0

"गैर-कार्य लेनदेन पर नमक की तरह कार्य करता है, जैसा कि * निक्स सिस्टम स्टोर पासवर्ड कैसे होता है। गैर-प्रयोग को आपके कुंजी से एन्क्रिप्ट किए गए मान को एन्ट्रॉपी जोड़ने के लिए उपयोग किया जाता है, जो कि दो लेनदेन एन्क्रिप्ट किए जाने वाले मौके को काफी हद तक समाप्त कर देता है और परिणामस्वरूप एक ही हस्ताक्षर, और अन्य समान क्रिप्टोग्राफिक हमलों में परिणाम। "

the answer by queso