2011-02-08 9 views
8

में एपीआई कुंजी की रक्षा कैसे करें मेरा एप्लिकेशन ट्विटर और फ़्लिकर जैसे कई वेब सेवाओं को हिट करता है। यह उन सेवाओं से एपीआई कुंजी का उपयोग करता है, और मैं उन्हें अपनी बाइनरी में obfuscate करना चाहता हूं। (मैं वास्तव में चोरी या कुछ भी चिंतित नहीं हूं, मुझे बस इन चाबियों को गुप्त रखने की आवश्यकता है।).NET अनुप्रयोग

इसके बारे में जाने का सबसे अच्छा तरीका क्या है?

यदि मैं उन्हें SecureString के रूप में संग्रहीत करता हूं, तो क्या उन्हें स्मृति से बाहर रखा जाता है? एमएसडीएन विवरण का कहना है कि टेक्स्ट "कंप्यूटर मेमोरी से हटाया गया है जब अब आवश्यकता नहीं है", लेकिन स्मृति में हमेशा एक आधार नहीं है?

क्या डॉटफुस्केटर मेरी असेंबली में अस्पष्ट होगा? (मान लीजिए कि मैं इसे work पर प्राप्त कर सकता हूं।)

+2

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

+0

मुझे लगता है कि सिक्योरस्टिंग स्थिति को और भी खराब कर देगा। चूंकि यह एक बड़ा संकेत है कि "मुझे देखो मैं बहुत गुप्त हूं"।SecureString डिस्क की कुंजी स्वैप करने जैसी चीजों के खिलाफ सुरक्षा करता है लेकिन दुर्भावनापूर्ण उपयोग के खिलाफ नहीं। – CodesInChaos

+0

और ट्विटर पर आपके http (अनुरोधों) को बस अवरुद्ध करना भी छोटा होना चाहिए। – CodesInChaos

उत्तर

4

एनन सही है, डेटा को पूरी तरह से सुरक्षित करने का कोई तरीका नहीं है; कोई हमेशा इसे प्राप्त कर सकता है।

लेकिन आप इसे यथासंभव मुश्किल बनाना चाहते हैं। यह चीजें हैं जो यह आसान को पढ़ने के लिए नहीं कर रही का मतलब है:

  • एक रजिस्ट्री कुंजी में संग्रहीत नहीं (जैसे TwitterAPIKey REG_SZ)
  • (जैसे twitterkey.txt), या एक INI फ़ाइल में एक पाठ फ़ाइल में संग्रहीत नहीं
  • आवेदन के .config फ़ाइल में संग्रहीत नहीं
  • द्विआधारी
  • में सादे पाठ के रूप भंडारण नहीं द्विआधारी
के दौरान एन्क्रिप्ट भंडारण नहीं

यह उन लोगों को छोड़ देगा जिन्हें डिबगर का ज्ञान होना चाहिए, और (संभवतः) असेंबली कोड।

आपने हमले की सतह को बहुत कम कर दिया है।

केवल पहले तीन सुझावों का पालन करें और आप अपने रास्ते पर अच्छे होंगे।

8

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

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

शुभकामनाएं!

~

+0

क्या यह संभव है कि आप अपने समाधान के लिए कुछ नमूना कोड पोस्ट करें? या यह बताता है कि यह कैसे काम करता है – Smith

0

हो सकता है आप अपने स्वयं के एपीआई कुंजी का उपयोग करने के लिए अपने उपयोगकर्ता पूछ सकते हैं "dont't अपने Ovaltine पीने के लिए भूल जाते हैं"। वे स्वयं को एपिस में पंजीकृत कर सकते हैं, और फिर अपने ऐप की सेटिंग्स में उनकी कुंजी का संदर्भ

+0

यह मोबाइल ऐप्स के लिए एक गैर-स्टार्टर होगा –