2010-08-04 16 views
7

मैं फ्लैश (एएस 3) में एक सोशल मीडिया ऐप का निर्माण कर रहा हूं जो फेसबुक के साथ कड़ाई से एकीकृत है - सभी उपयोगकर्ता खातों को फेसबुक कनेक्ट के माध्यम से संभाला जाता है, और सभी फेसबुक कनेक्टिविटी को संभाला जाता है Javascript और AS3 Facebook एपीआई के संयोजन के माध्यम से। मैं सर्वर-साइड डेटा प्रबंधन के लिए बैकएंड पर Codeigniter का उपयोग कर रहा हूं, जिसमें फ्लैश से URLRequests के माध्यम से साइट पर उपयोगकर्ता क्रियाओं और डेटा को ट्रैक करना शामिल है।फेसबुक प्रमाणीकरण लागू करना: क्लाइंट-साइड और सर्वर-साइड

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

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

वैसे भी, मैं इस पर विचार कर रहा हूं, लेकिन यह एक महत्वपूर्ण बिंदु की तरह लगता है और मुझे वास्तव में सर्वोत्तम दृष्टिकोण की जानकारी नहीं है। किसी भी प्रतिक्रिया की काफी सराहना की जाएगी!

उत्तर

1

यह एक वैध चिंता है क्योंकि आप CWE-603: Use of Client-Side Authentication का उल्लंघन कर रहे हैं। एन्क्रिप्शन इस स्टेशन की मदद नहीं कर सकता क्योंकि एक दुर्भावनापूर्ण ग्राहक कोई रहस्य प्राप्त करने में सक्षम होगा।

क्लाइंट को सत्यापित करने का सबसे अच्छा तरीका फ्लैश ऐप को सर्वर पर information about the session भेजना है। सर्वर को php api जैसे कुछ का उपयोग करके फेसबुक पर वापस कनेक्ट करना होगा ताकि सर्वर सत्यापित कर सके कि क्लाइंट के पास फेसबुक के साथ एक वैध सत्र है। यह प्रति लॉगिन एक बार किया जाना चाहिए, और फिर आप उस उपयोगकर्ता के लिए अपने डेटा स्टोर तक पहुंचने के लिए फ्लैश ऐप में सत्र आईडी (कुकी) जारी कर सकते हैं।

+0

रूक, क्या आप क्लाइंट के लिए उपलब्ध सत्र के बारे में जानकारी के रूप में एक्सेस-टोकन का जिक्र कर रहे हैं और सर्वर द्वारा एफबी से कनेक्ट करने के लिए उपयोग किया जा सकता है? – Totach

+0

बस आपको बताने के लिए, आपका wiki.developers.facebook लिंक टूटा हुआ है। संदर्भ: meta.stackoverflow.com/q/101241/149820 – staticbeast

+0

यह गलत है। हालांकि यह इसे पूरा करने का एक तरीका है, क्लाइंट (जावास्क्रिप्ट) libs द्वारा कुकी सेट का उपयोग करना अधिक कुशल है। – MetaChrome

6

मैंने अभी इसे एक बार निकालने का प्रयास करने में एक टन बिताया! मुझे पता है कि यह एक पुराना सवाल है, लेकिन उम्मीद है कि यह आपके लिए अभी भी कम से कम किसी और के लिए उपयोगी होगा।

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

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

अधिक जानकारी के लिए आप इन पृष्ठों की जाँच पर विचार हो सकता: पीएचपी - https://developers.facebook.com/docs/guides/web/#personalization रूबी - http://vombat.tumblr.com/post/835536630/ruby-version-of-facebooks-get-facebook-cookie-in-php

मैं भी ध्यान देना चाहिए कि दोनों लिंक्डइन और ट्विटर के लिए इसी तरह के तरीकों से मौजूद हैं।

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