2012-12-01 9 views
31

हम उद्यम अनुप्रयोगों के निर्माण के लिए breeze js पर विचार कर रहे हैं।विंड.जेएस सुरक्षा को संभालने और व्यापार तर्क को उजागर करने से कैसे बचाता है

हवा की उत्कृष्टता यह है कि हम ग्राहक ब्राउज़र से सीधे प्रश्न निष्पादित कर सकते हैं। यह अनावश्यक डेटा लोड किए बिना उपयोगकर्ताओं इनपुट के आधार पर गतिशील क्वेरी तैयार करने की अनुमति देता है। मैंने पाया है कि ब्रीज़ का उपयोग करके हम व्यवसाय तर्क बना सकते हैं जो आलसी लोडिंग रणनीति का उपयोग करते समय 1/10 या उससे भी अधिक समय तक डेटा को स्थानांतरित/स्थानांतरित कर देता है। these

Hooray हवा जैसे प्रश्नों का उपयोग करना !!!

लेकिन व्यापार तर्क सुरक्षा के बारे में क्या, उदाहरण के लिए, हमारे पास एक भंडार हो सकता है जिसमें हम अपने व्यापार तर्क को छुपा सकते हैं, छुपा सकते हैं और अस्पष्ट कर सकते हैं; और फिर उन रिपॉजिटरी सी # कक्षाओं को कॉल करने के लिए एमवीसी वेब एपीआई नियंत्रकों का उपयोग करें। तो वेबपृष्ठ नियंत्रक के लिए जावास्क्रिप्ट वार्तालाप और वेब एपीआई नियंत्रक सी # भंडार से बात करता है। नियंत्रकों को हमेशा पढ़ने के लिए बहुत ही सरल और आसान रखा जाएगा, लेकिन रिपोजिटरी आवेदन के उपयोग से कंपनी के लिए बहुत सारे व्यवसाय तर्क को समाप्त कर सकती है। इसलिए यदि कोई हैकर जावास्क्रिप्ट कोड का निरीक्षण करने के लिए Google क्रोम डेवलपर का कंसोल उपयोग करता है, तो वह सभी देखेंगे जैसे GetCustomers(), GetProductsForThisId (54)। वहां बहुत अधिक जानकारी नहीं है जिसे देखा जा सकता है (या चोरी हो सकता है)। क्योंकि 90% बिजनेस लॉजिक सर्वर पर सी # रेपॉजिटरी पर लाइव होगा।

कैसे breeze.js कि निपटने है?

यदि हम "नियंत्रक के सी # से हवा जावास्क्रिप्ट" तक प्रश्नों और व्यावसायिक तर्क को स्थानांतरित करना शुरू करते हैं, तो हमें यह मानना ​​होगा कि हमारी प्रणाली सदस्यता आधारित है। मुझे लगता है कि हम जावास्क्रिप्ट में क्लाइंट को जितने अधिक प्रश्नों का पर्दाफाश करते हैं, उतना ही कमजोर हमारा सॉफ़्टवेयर बन जाता है, और जितना अधिक हम हैकर्स को हमारी वेबसाइट को हैक करने और संभवतः चोरी चोरी करने के बारे में बताते हैं।

उत्तर

43

सुरक्षा एक महत्वपूर्ण चिंता है। क्लाइंट पर उजागर डेटा और तर्क के बारे में सावधानी से सोचना बुद्धिमानी है। हम इन भावनाओं को एक SOK उत्तर के लिए उपयुक्त ठोस प्रश्न में कैसे परिष्कृत कर सकते हैं?

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

लेकिन मैं समझने के लिए ग्राहक प्रश्नों खुद को कि रक्षा करने की जरूरत है व्यापार तर्क के प्रकार के होते हैं संघर्ष। किसी ग्राहक के लिए एक प्रश्न में खतरा कहां है जिसका नाम 'ए' से शुरू होता है?

आप नेट वर्थ> $ 100,000 वाले ग्राहकों के लिए एक प्रश्न के बारे में चिंता कर सकते हैं। लेकिन गलती सवाल में नहीं है। गलती किसी भी तरह द्वारा अनाधिकृत उपयोगकर्ताओं लिए इस तरह के ग्राहकों की जानकारी को उजागर में हो, चाहे के माध्यम से होता है एक हवा जहां खंड एक प्रश्न या GetCustomers नाम के एक सेवा() के लिए एक कॉल के साथ जोड़ दिया।

ग्राहकों को अनधिकृत पहुँच ब्लॉक करने के लिए जगह सर्वर पर है और आप उस के रूप में आसानी से एक हवा नियंत्रक कार्रवाई लौटने IQueryable विधि के अंदर आप कर सकते हैं के रूप में अपने GetCustomer में() विधि कर सकते हैं। किसी भी मामले में बोझ आपके नियंत्रक पर आवश्यक सुरक्षा बाधाओं को लागू करने और आपके द्वारा प्रकट की जाने वाली विधियों के भीतर लागू होता है।

आप नियंत्रक लिखें। आप भंडार लिखते हैं। आपके पास उपयोगकर्ता की अनुमतियों तक पहुंच है।आप जितनी चाहें उतनी या कम से कम खुलासा करने की असंगत क्षमता के साथ पूर्ण नियंत्रण में हैं।

Fwiw, अपने हवा EntityManager सेवा तरीकों कि IQueryable<Customer> नहीं लौटते कॉल कर सकते हैं। यह IEnumerable<Customer> GetCustomers() या Product GetProductForId(int id) जैसे वेब एपी नियंत्रक विधियों को कॉल कर सकता है। मेरी राय में आप किसी भी सुरक्षा प्राप्त किए बिना ब्रीज़ की क्वेरी सुविधाओं की लचीलापन खो देंगे। लेकिन यह महज मेरी राय है। ब्रीज़ आपकी पसंद का समर्थन करेगा, चाहे जो भी हो।

मुझे एक और विशिष्ट "कैसे करें" प्रश्न का उत्तर देने का प्रयास करने में खुशी होगी।

+0

मुझे लगता है कि यहां चिंता है यदि ऐसे प्रश्न हैं जहां उपयोगकर्ता के लिए पंक्तियां नहीं थीं। यह कीड़े का एक खुलता है। जब आप इसे किसी मौजूदा ऐप पर बोल्ट करते हैं तो शायद अधिक चिंता का विषय। लेकिन अगर आप अपने सिस्टम को हवा में दिमाग से डिजाइन करते हैं तो मुझे लगता है कि प्रश्न ठीक होना चाहिए –

+2

यह एक महत्वपूर्ण सुरक्षा बाधा हो सकती है ... और आपको सर्वर पर पूर्ण और निश्चित ज्ञान के साथ सर्वर पर लागू होना चाहिए। यह सुनिश्चित करने के लिए काम है *** कोई फर्क नहीं पड़ता कि आप अपने सर्वर-साइड एपीआई कैसे बनाते हैं ***। ब्रीज़ आपको इस तरह की चीज़ों के साथ बहुत मदद नहीं करता है ... लेकिन यह किसी भी तरह से खड़ा नहीं है। – Ward

+0

@ वार्ड, मुझे आपका जवाब समझ में नहीं आया। मुझे लगता है कि क्वेरी सुविधा जोखिम का पर्दाफाश करती है और मुझे नहीं लगता कि जोखिम को कैसे रोकें। आइए मान लें कि सर्वर एक प्रतिबंधित इकाई से संबंधित एक अप्रतिबंधित इकाई के लिए एक क्वेरी एंट्री पॉइंट का खुलासा करता है। मैं क्लाइंट को प्रतिबंधित इकाई को शामिल करने के लिए लिखूंगा, लेकिन एक दुर्भावनापूर्ण ग्राहक इसका अनुरोध कर सकता है। इसे रोकने के लिए मैं सर्वर कैसे लिखूं? मैं पूरी तरह से सहमत हूं कि मुझे "आवश्यक सुरक्षा बाधाओं को लागू करने" और "सर्वर पर लागू करने" की आवश्यकता है, लेकिन सवाल यह है कि मैं यह कैसे कर सकता हूं? क्या मैं क्वेरी का विश्लेषण करता हूं? क्वेरी परिणाम की प्रत्येक इकाई का निरीक्षण करें? – steve

2

जोड़ने के लिए आपको उपयोगकर्ताओं को WebAPI में विशेषताओं का उपयोग करके quering से अधिकृत नहीं हैं अगर आप 401 कोड सर्वर से वापस पाने के लिए सिर्फ एक लॉगिन स्क्रीन पॉपअप और काम करने के बाद उपयोगकर्ता के प्रवेश की जरूरत फिर से करना प्रतिबंधित कर सकते हैं चाहते हैं

तो एक उपयोगकर्ता एक आदेश के बारे में डेटा प्राप्त करने की कोशिश कर सकते हैं लेकिन जब तक वह breeze.js का उपयोग कर सामान का एक बहुत इतना

0

आप कर सकते हैं करने के लिए अधिकृत किया गया है सभी की सबसे पहले जाँच वह यह नहीं मिलेगा मेरी सुरक्षा के बारे में उत्तर

How to handle authorization with Breeze JS?

इसके अलावा, हालांकि air.js क्लाइंट पर सामान्य ओआरएम (जो कई बार बेहद सहायक हो सकता है) की तरह इस्तेमाल किया जा सकता है, आपको वेब एपीआई नियंत्रकों में अपना व्यावसायिक तर्क रखना चाहिए और ओडाटा प्रश्नों का उपयोग करके केवल आवश्यक सामग्री का खुलासा करना चाहिए। यदि आपको किसी भी डेटा मैनिपुलेशन तर्क की आवश्यकता है, तो आपको इसके लिए एक विशिष्ट विधि का उपयोग कर सर्वर पर करना चाहिए।

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

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