2010-03-09 16 views
5

मुझे समुद्री डाकू इत्यादि के बारे में बहुत कुछ नहीं लगता है, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि बैकएंड (रेल आधारित) स्वचालित सेवाओं के लिए खुला नहीं है जो इसे डॉस कर सकता है आदि। इसलिए मैं बस यह सुनिश्चित करना चाहता हूं कि सभी तक पहुंच बैकएंड (जो डेटा प्राप्त करने और पुट करने के लिए कुछ आरईएसटी प्रश्न होंगे) एक वैध आईफोन एप्लिकेशन के माध्यम से होगा, और मशीन पर चल रही कुछ स्क्रिप्ट नहीं होगी।एक सर्वर बैकएंड के साथ आईफोन ऐप - यह सुनिश्चित करने के लिए कि सभी एक्सेस केवल आईफोन ऐप से हैं?

मैं खातों के उपयोग से बचना चाहता हूं ताकि उपयोगकर्ता का अनुभव निर्बाध हो।

मेरी पहली इरादा एक साथ UDID और एक गुप्त हैश, और कहा कि (और UDID) सर्वर के लिए एक HTTPS कनेक्शन पर प्रदान करना है। यह या तो एक प्रमाणीकृत सत्र को बनाने या त्रुटि को वापस करने की अनुमति देगा।

यदि बचाया गया है, तो एक हमलावर हैश ले सकता है और इसे फिर से चला सकता है, जिससे इस योजना को हमलों को फिर से चलाने के लिए खुला छोड़ दिया जा सकता है। हालांकि क्या HTTPS कनेक्शन मुझे सहेजने के खिलाफ नहीं बचा सकता है?

धन्यवाद!

उत्तर

6

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

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

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

+0

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

2

इसे सुनिश्चित करने का कोई तरीका नहीं है, क्योंकि इसे धोखा दिया जा सकता है।

तुम सच में यह तरीका अपनाते हैं (ईमानदारी से, जब तक आप वास्तव में कुछ सुपर यहाँ आप शायद अपना समय बर्बाद कर रहे हैं महत्वपूर्ण मिशन कर रहे हैं) के लिए चाहते हैं, तो आप iPhone डिवाइस टोकन दे सकते हैं। या शायद इसे हैश करें और फिर इसे पास करें। बेशक, आपके पास सर्वर साइड या किसी भी चीज़ पर इसे सत्यापित करने का कोई तरीका नहीं है, लेकिन यदि कोई बुरा आदमी वास्तव में आपको नीचे ले जाना चाहता है, तो यहां रोडब्लॉक # 1 है जिसे उसे पहले से निपटना होगा।

3

क्लाइंट प्रमाणपत्र के साथ SSL का उपयोग करें। अपने क्लाइंट में एक निजी कुंजी लें और इसके लिए प्रमाणपत्र जारी करें, और सत्रों के आगे बढ़ने के लिए आपके वेब सर्वर को इस क्लाइंट प्रमाण को उपस्थित होने की आवश्यकता हो सकती है।

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

तुम भी HMAC, HMAC-SHA1, जो मूल रूप से हैश के मानकीकरण है सामान है कि अन्य लोगों ने यहां के बारे में बात की तरह विचार कर सकते हैं। यदि आपने इसमें nonces जोड़ा है, तो आप रीप्ले हमले के खिलाफ भी सुरक्षित रहेंगे। गैर -सेस के साथ एचएमएसी-एसएचए 1 को कार्यान्वित करने के बारे में एक विचार के लिए, आप OAuth प्रोटोकॉल को देख सकते हैं (पूरे प्रवाह पर नहीं, बल्कि वे एक प्रमाणीकृत अनुरोध में एक साथ और अन्य पैरामीटर को कैसे जोड़ते हैं)।

+0

यह एक शानदार जवाब है। मुझे लगता है कि क्लाइंट पर निजी कुंजी रखने के लिए मेरे लिए बहुत जटिलता हो सकती है, लेकिन मुझे सराहना है कि यह सबसे औपचारिक और सुरक्षित तरीका है। मैं निश्चित रूप से देखता हूं कि क्या आवश्यक है, धन्यवाद! – Nex

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