android - प्रतिक्रियात्मक मूल में संवेदनशील डेटा सहेजें



ios react-native (3)

मैं एक प्रतिक्रियात्मक मूल अनुप्रयोग बना रहा हूं और मुझे कुछ संवेदनशील डेटा को टोकन और रीफ्रेश टोकन जैसे सहेजने की आवश्यकता है। स्पष्ट समाधान AsyncStorage का उपयोग करके उस जानकारी को सहेजना है। समस्या AsyncStorage का सुरक्षा स्तर है।

AsyncStorage स्थानीय रूप से टोकन और डेटा स्टोर करने का एक तरीका प्रदान करता है। स्थानीय स्तर पर विकल्प के मुकाबले यह कुछ तरीकों से हो सकता है। पूर्ण उत्पादन अनुप्रयोगों में, एसिंक स्टोरेज को सीधे एक्सेस नहीं करने की अनुशंसा की जाती है, लेकिन इसके बजाय, एक एब्स्ट्रक्शन लेयर का उपयोग करने के लिए, जैसा कि AsyncStorage को उसी ब्राउज़र का उपयोग करके अन्य ऐप्स के साथ साझा किया जाता है, और इस प्रकार स्टोरेज से सभी वस्तुओं की एक दुर्भावनापूर्ण निष्कासन को खराब कर सकता है पड़ोसी ऐप्स का कामकाज।

https://auth0.com/blog/adding-authentication-to-react-native-using-jwt/

एक मूल ऐप में, मैं iOS में Keychain और Android में निजी मोड में Shared Preferences लिए जाऊंगा।

रिएक्ट नेटिव द्वारा प्रदान किए गए दस्तावेज में जो मैंने पढ़ा है उसके लिए:

आईओएस पर, AsyncStorage को मूल कोड द्वारा समर्थित किया जाता है जो एक क्रमबद्ध शब्दकोश में छोटे मानों को संग्रहित करता है और अलग-अलग फ़ाइलों में बड़े मानों को संग्रहीत करता है। एंड्रॉइड पर, AsyncStorage या तो उपलब्ध है के आधार पर RocksDB या SQLite का उपयोग करेगा।

AsyncStorage

वे उस डेटा की सुरक्षा के बारे में कभी बात नहीं करते हैं।

Android लिए मॉड्यूल बनाने का यह सबसे अच्छा समाधान Android (जो निजी मोड में Shared Preferences का उपयोग करता है ) और दूसरा iOS (जो किचेन का उपयोग करता है) समझदार डेटा को बचाने के लिए? या प्रदान की गई AsyncStorage विधियों का उपयोग सुरक्षित है?

https://ffff65535.com



प्रतिक्रियात्मक कोड में बस खुदाई, मुझे जवाब मिला।

एंड्रॉयड

React Native AsyncStorage मॉड्यूल कार्यान्वयन SQLiteOpenHelper पर आधारित है। वह पैकेज जहां सभी डेटा वर्गों को संभाला जाता है: https://github.com/facebook/react-native/tree/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage

डेटाबेस बनाने के निर्देशों के साथ कक्षा: https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage/ReactDatabaseSupplier.java

एंड्रॉइड प्रलेखन द्वारा, एप्लिकेशन द्वारा बनाए गए डेटाबेस निजी डिस्क स्थान में सहेजे गए हैं जो संबंधित अनुप्रयोग है, इसलिए यह सुरक्षित है।

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

Source

आईओएस

आईओएस में AsyncStorage मान serialized शब्दकोश फ़ाइलों में सहेजे गए हैं। उन फ़ाइलों को एप्लिकेशन NSDocumentDirectory में सहेजा जाता है। आईओएस में सभी एप्लिकेशन अपने स्वयं के सैंडबॉक्स में रहते हैं, इसलिए एक आवेदन की सभी फाइलें सुरक्षित हैं, उन्हें अन्य अनुप्रयोगों द्वारा एक्सेस नहीं किया जा सकता है।

आईओएस में कोड जो AsyncStorage मॉड्यूल को संभालता है, यहां पाया जा सकता है: https://github.com/facebook/react-native/blob/master/React/Modules/RCTAsyncLocalStorage.m

और जैसा कि हम here देख सकते हैं, AsyncStorage द्वारा सहेजे गए मानों को संग्रहीत करने के लिए उपयोग की जाने वाली फ़ाइलों को NSDocumentDirectory (एप्लिकेशन सैंडबॉक्स पर्यावरण के अंदर) के अंतर्गत सहेजा जाता है।

प्रत्येक ऐप एक द्वीप है फ़ाइल सिस्टम के साथ एक आईओएस ऐप की बातचीत ज्यादातर ऐप के सैंडबॉक्स के अंदर निर्देशिकाओं तक सीमित होती है। एक नए ऐप की स्थापना के दौरान, इंस्टॉलर ऐप के लिए कई कंटेनर बनाता है। प्रत्येक कंटेनर की एक विशिष्ट भूमिका है। बंडल कंटेनर में ऐप का बंडल होता है, जबकि डेटा कंटेनर में एप्लिकेशन और उपयोगकर्ता दोनों के लिए डेटा होता है। डेटा कंटेनर को कई निर्देशिकाओं में विभाजित किया गया है जो ऐप अपने डेटा को सॉर्ट और व्यवस्थित करने के लिए उपयोग कर सकते हैं। ऐप अतिरिक्त कंटेनरों तक पहुंच का भी अनुरोध कर सकता है - उदाहरण के लिए, iCloud कंटेनर-रनटाइम पर।

Source

निष्कर्ष

उपयोगकर्ता टोकन को सहेजने के लिए AsyncStorage का उपयोग करना सुरक्षित है, क्योंकि उन्हें सुरक्षित संदर्भ में सहेजा जाता है।

कृपया ध्यान दें कि यह रूट के बिना एंड्रॉइड डिवाइसों के लिए और आईओएस उपकरणों के बिना जेलबैक के बिना ही सच है। कृपया यह भी ध्यान दें कि अगर हमलावर के पास डिवाइस तक भौतिक पहुंच है और डिवाइस सुरक्षित नहीं है। वह डिवाइस को मैक लैपटॉप से ​​कनेक्ट कर सकता है और दस्तावेज़ निर्देशिका निकाल सकता है और दस्तावेज़ निर्देशिका के तहत सहेजी गई सभी सामग्री देख सकता है।


AsyncStorage दस्तावेज़ निर्देशिका में सादे टेक्स्ट जेएसओएन फ़ाइल के रूप में कुंजी-मूल्य जोड़ों को बचाता है। यह इसकी सामग्री एन्क्रिप्ट नहीं करता है

यह एक सुरक्षा समस्या है (कम से कम आईओएस पर) क्योंकि हमलावर के लिए सैंडबॉक्स की सामग्री का डंप प्राप्त करने के लिए डिवाइस तक पहुंच के साथ संभव है और AsyncStorage माध्यम से सहेजे गए किसी भी डेटा को तुच्छ रूप से निकालना AsyncStorage

यह AsyncStorage.js के दस्तावेज़ों में स्पष्ट रूप से नहीं बताया गया था, लेकिन यह अब है: https://github.com/facebook/react-native/pull/8809

यह भी देखें: https://.com/a/38398114/1072846





react-native