2010-10-20 11 views
31

स्नूप आपको एप्लिकेशन के अंदर देखने और तत्व गुणों को बदलने की अनुमति देता है। डेवलपर्स के लिए यह एक बड़ी संपत्ति है, लेकिन कुछ मामलों में एक सुरक्षा समस्या हो सकती है, जैसे कि हमारे पास ऐसे उपयोगकर्ता हैं जो उन स्थानों पर देखना पसंद करते हैं जहां उन्हें नहीं दिखना चाहिए। क्या आपके एप्लिकेशन को "स्नूपिंग" से स्नूप जैसे अनुप्रयोगों को अवरुद्ध करने का कोई तरीका है?अपने wpf एप्लिकेशन को सबूत कैसे स्नूप करें?

और यदि इसे अवरुद्ध करने का कोई तरीका नहीं है, तो सुरक्षा जोखिम को कम करने के लिए आप क्या करने की सलाह देते हैं?

स्नूप एक उपयोगिता है जो आपको एक डब्ल्यूपीएफ एप्लिकेशन के दृश्य पेड़ को ब्राउज़ करने और गुणों को देखने और बदलने की अनुमति देती है। यह बहुत उपयोगी है जब आप कुछ डीबग करने की कोशिश कर रहे हैं और आपको पता नहीं है कि क्या हो रहा है। आप अधिक here पा सकते हैं।

धन्यवाद।

+0

अच्छा सवाल, गया खुद को सोचकर –

+1

क्या आप इस "स्नूप" प्रोग्राम पर अधिक जानकारी दे सकते हैं, या उस पर जानकारी के लिए एक लिंक पोस्ट कर सकते हैं? –

उत्तर

30

सुरक्षा को ठीक से कार्यान्वित करके। यदि आपकी "सुरक्षा" को स्नूप जैसे टूल से विफल किया जा सकता है, तो आप इसे गलत कर रहे हैं।

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

+0

केंट, आपकी प्रतिक्रिया के लिए धन्यवाद। मैं आपसे सहमत हूं, यूआई स्तर पर सुरक्षा लागू नहीं की जानी चाहिए। मेरी प्रोजेक्ट पर हम कमांड का उपयोग करते हैं और हमारे पास CanExecute में तर्क है जो कुछ उपयोगकर्ताओं के लिए बटन अक्षम कर देगा (और उन्हें स्नूप का उपयोग करके पुन: सक्षम नहीं किया जा सकता है), साथ ही सर्वर सुरक्षा उपाय जो उपयोगकर्ताओं को कुछ चीजों को करने में सक्षम होने से रोकते हैं। हालांकि हमारे पास अन्य एप्लिकेशन हैं जो कमांड का उपयोग नहीं करते हैं और बटन छुपाए जा रहे हैं, इसलिए उन्हें आसानी से "स्नूप" किया जा सकता है। – chiefanov

39

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

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

AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad); 

फिर,:

सबसे पहले, आप कहीं आपके आवेदन (अधिमानतः begginging) में विधानसभा-लोडेड घटना की सदस्यता के लिए की जरूरत है

 void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args) 
    { 
     if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector")) 
      MessageBox.Show("hey you, stop snooping");//and shut down your application. 
    } 

आपको वास्तविक चांदी-बुलेट समाधान के लिए इस समाधान को बढ़ाने की आवश्यकता होगी, लेकिन कम से कम यह समाधान निश्चित रूप से स्नूप के मौजूदा नवीनतम संस्करण को रोक देगा (कोड संशोधित किए बिना)। बेहतर समाधान यह जांचना होगा कि आपके आवेदन में कोई बाहरी असेंबली इंजेक्शन नहीं दी जा रही है।

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

+3

यह बहुत अच्छा है। और केंट के जवाब के साथ संयोजन में जो मैं खोज रहा था। – chiefanov

+2

इनमें से दोनों महान जवाब हैं, आपको बहुत धन्यवाद –

+0

हाँ, यह उत्तर समाधान को पूरा करता है। – ahmedsafan86

0

बहुत अच्छा प्रश्न के लिए बढ़िया प्रतिक्रियाएं,

मैं, पासवर्ड है कि आपके DataContext में कभी नहीं बचाया जाना चाहिए का एक उदाहरण जोड़ने के लिए तांक-झांक की जांच भी यूआई के DataContext के रूप में, इसलिए यदि आप सही उपयोग करना चाहते हैं नियंत्रण PasswordBox आपको लगता है कि आप पासवर्ड संपत्ति को नहीं बांध सकता मिलेगा, कि भले ही आप आवेदन आप पासवर्ड नहीं मिल सकता है के रूप में यह किसी भी संपत्ति

में सहेजा नहीं गया है लेकिन हम कई लोग हैं जो करने की कोशिश पाया तांक-झांक का मतलब पासवर्ड को बाध्य करने के लिए चारों ओर एक काम (सहायक, व्यवहार, उपयोगकर्ता नियंत्रण ...) बनाएं, लेकिन वे भूल जाते हैं कि स्नूप इसे

की तरह प्राप्त कर सकता है

तो आपके सर्वर को कभी भी अपने ग्राहक पर भरोसा नहीं करना चाहिए, हर बार इसे सही विशेषाधिकार की जांच करनी चाहिए (क्योंकि हम एक्सप्लोरर के लिए फिडलर का उपयोग करके ग्राहक अनुरोध को फिर से बना सकते हैं, फिर क्लाइंट एप्लिकेशन सुरक्षा पास करने के लिए एक कस्टम अनुरोध का पुनर्निर्माण कर सकते हैं)

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