2009-09-03 20 views
5

पर किसी वेब एप्लिकेशन (asp.net) में पेपैल प्रमाण-पत्र संग्रहीत करना मैंने एक वेब सर्वर बनाया है जो साझा सर्वर पर गोडाडी पर होस्ट किया गया है। मैं अपने लेनदेन के लिए पेपैल का उपयोग करने की योजना बना रहा हूं, जो एक समस्या पैदा करता है।किसी साझा होस्ट

इस बिंदु पर प्रमाण-पत्र (पेपैल ईमेल और पासवर्ड) हार्डकोडेड हैं, जहां तक ​​मैं सबसे खराब समाधान को समझता हूं। एकमात्र अन्य विकल्प जिसे मैं जानता हूं वह web.config फ़ाइल में है, जो फिर से विशेष रूप से सुरक्षित प्रतीत नहीं होता है।

क्या आप मुझे ऐसी दिशा में इंगित कर सकते हैं जो साझा होस्ट वातावरण में वांछित सुरक्षा प्रदान करे और काम करे?

सादर एलेक्ज़ेंड्रोस

उत्तर

2

एक साझा मेजबान पर, सबसे आसान तरीका कम से कम पहली नजर में पासवर्ड एन्क्रिप्ट करने और अपने डेटाबेस में संग्रहीत करने के लिए किया जाएगा।

आपके एन्क्रिप्शन तंत्र के साथ कार्यान्वयन किया जा सकता है। फिर एक महत्वपूर्ण परिप्रेक्ष्य से, आपके पास सुरक्षा के विभिन्न स्तरों के साथ इसे संग्रहीत करने के लिए कई विकल्प हैं, वास्तव में इस पर निर्भर करता है कि आप इसके साथ "पारानोइड" कैसे हैं।

  1. सीधे शब्दों में (जैसे कि डीबी पासवर्ड के रूप में कम से कम सुरक्षित है, लेकिन web.config की पहुंच सीमित और अन्य संवेदनशील सामान है वहाँ पहले से ही है,) एक अनुप्रयोग की स्थापना के रूप में web.config में एन्क्रिप्शन कुंजी की दुकान
  2. बनाएं web.confg के लिए एक कस्टम कॉन्फ़िगरेशन अनुभाग, फिर वहां मानों को एन्क्रिप्ट और स्टोर करें। (यह अधिक सुरक्षित है, क्योंकि यह सादा पाठ के माध्यम से पठनीय नहीं होने की आपकी कुंजी प्राप्त करता है)
  3. डेटाबेस तालिका में एन्क्रिप्शन कुंजी स्टोर करें, और उस तालिका को क्वेरी करने के लिए केवल एक ही उपयोगकर्ता acccount सीमित करें। (आपके विचारों पर निर्भर करता है, यह शायद सबसे पोर्टेबल समाधान हो सकता है ..)
+0

कैसे आप एक तरीका है कि आवेदन एक असुरक्षित स्थिति में कुंजी से बाहर निकले बिना पासवर्ड का उपयोग करने की अनुमति देता में महत्वपूर्ण स्टोर करते हैं ? – Tyrsius

+0

इसके लिए कुछ विकल्प हैं .... आप web.config (MachineKey) में मौजूद कुंजी का उपयोग कर सकते हैं, या आप अपनी खुद की कुंजी बना सकते हैं, और इसे एन्क्रिप्टेड web.config विकल्प में डाल सकते हैं। –

+0

@ टियरियस - मैंने कुछ विचार देने के लिए विकल्पों के साथ-साथ कुछ विवरण भी जोड़े। –

0

आप उन्हें web.config में स्टोर कर सकते हैं, और फिर web.config फ़ाइल एन्क्रिप्ट कर सकते हैं?

या कम से कम, उन्हें web.config में व्यक्तिगत रूप से एन्क्रिप्ट करें?

0

मुझे लगता है कि आपके पास निम्नलिखित विकल्प हैं। डेटाबेस में

  1. एन्क्रिप्ट web.config फ़ाइल

  2. स्टोर एन्क्रिप्शन

  3. का उपयोग कर एक कक्षा लाइब्रेरी बना सकते हैं और एक वर्ग है जो इस जानकारी का आयोजन करेगा पैदा करते हैं। अब साझा वातावरण पर, इसे बस बिन फ़ोल्डर के अंदर डीएलएल के रूप में जोड़ा जाएगा।

+0

1. मुझे पता है कि यह किया जा सकता है। मुझे यकीन नहीं है कि यह साझा मेजबानों में किया जा सकता है। 2 और 3. डिकंपाइल समस्या के तहत जाओ। क्या मैं पागल हो रहा हूँ? –

+0

मेरे पसंदीदा फ्रेज़ में से एक: क्या आदमी करता है, अन्य आदमी पूर्ववत कर सकता है। कोई माथे नहीं तुम क्या करते हो। अगर कोई इसका प्रयास करता है, तो वह इसे पूर्ववत कर सकता है। और अब जब आप अधिक भयावह हैं कि पहले, शांत रहें और सोचें: क्या मेरी जानकारी क्रैकर्स के ध्यान के लिए इतनी आकर्षक है? यदि नहीं, तो web.config में जानकारी को एन्क्रिप्ट करना पर्याप्त है। – rcdmk

3

आपके विकल्प हैं:

  1. एपीआई पासवर्ड + एपीआई हस्ताक्षर। आपके पास होगा जहां इसे सादे टेक्स्ट या कुछ डिक्रिप्टेबल के रूप में स्टोर करने के लिए, शायद यह फ़ाइल या डेटाबेस हो।

  2. एपीआई पासवर्ड + एपीआई प्रमाणपत्र। आपको यह देखने के लिए जांचना होगा कि होस्टिंग सेवा प्रदाता उपयोगकर्ताओं को अन्य सर्वरों (यानी PHP में CURLOPT_SSLCERT) के लिए एसएसएल कनेक्शन स्थापित करने देता है। यदि आप कर सकते हैं, तो का उपयोग करें।

हालांकि, जिस तरह से आप चुनते हैं की परवाह किए बिना, अगर एक हैकर आपके खाते में पहुंचना कर सकते हैं, वह/वह अपना पासवर्ड, या अपने प्रमाणपत्र फ़ाइल को प्राप्त कर सकेंगे।

पेज। कृपया ध्यान दें कि "एपीआई पासवर्ड", "एपीआई हस्ताक्षर", और "एपीआई प्रमाण पत्र" शब्द वे हैं जिन्हें वे पेपैल एपीआई संदर्भों और डेवलपर मैनुअल में संदर्भित करते हैं।

+0

दूसरे विकल्प से फिक्स्ड वर्डिंग और 'हस्ताक्षर' हटा दिया गया है, क्योंकि एपीआई सर्टिफिकेट में एपीआई हस्ताक्षर नहीं है और इसके विपरीत। – Robert

+0

@Robert संपादन के लिए धन्यवाद। :) – shinkou

0

चूंकि आपके पास सर्वर तक पहुंच नहीं है, इसलिए आपको कोड के माध्यम से अपने web.config के अनुभागों को एन्क्रिप्ट करने के लिए कमांड चलाने की आवश्यकता होगी। आप इसे एक साधारण वेब पेज बनाकर और पेज लोड पर या बटन क्लिक पर चलाकर ऐसा कर सकते हैं। नीचे कोड ब्लॉक है जिसे आपको चलाने की आवश्यकता होगी, माइक्रोसॉफ्ट (http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx) से लिया गया स्रोत से केवल थोड़ा संशोधित किया गया है। हालांकि ... यह कोड वास्तव में मेरे लिए काम नहीं करता था। यह नहीं कि कोड सही नहीं है, लेकिन क्योंकि मेरे खाते में आरए कुंजी स्टोर की अनुमति नहीं है, इसलिए आपके परिणाम अलग-अलग हो सकते हैं। यदि यह काम नहीं होता है विकल्प के लिए 2.

' Get the current configuration file.' 
    Dim config As System.Configuration.Configuration = Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Nothing) 

    ' Get the section.' 
    Dim section As AppSettingsSection = CType(config.GetSection("appSettings"), AppSettingsSection) 

    ' Protect (encrypt) the section.' 
    section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider") 

    ' Save the encrypted section.' 
    section.SectionInformation.ForceSave = True 
    config.Save(ConfigurationSaveMode.Full) 

क्रेडिट पर पढ़ें: मैं Need Encrypted connection string and stmp information in the web.config के माध्यम से कोड के साथ कि लिंक मिल गया।

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

एन्क्रिप्टेड करने के लिए

हो और ऐप कुंजी मान आप इस तरह कोड का इस्तेमाल कर सकते डिक्रिप्ट:

Dim encryptedString As String = Convert.ToBase64String(ProtectedData.Protect(System.Text.UTF8Encoding.UTF32.GetBytes("Testing"), Nothing, DataProtectionScope.LocalMachine)) 
    Dim decryptedString As String = System.Text.UTF8Encoding.UTF32.GetString(ProtectedData.Unprotect(Convert.FromBase64String(encryptedString), Nothing, DataProtectionScope.LocalMachine)) 

    Response.Write(encryptedString + " - " + decryptedString) 
+0

मैं काम करने के लिए पहली विधि (सी # में कोड का अनुवाद) प्राप्त करने में सक्षम नहीं था, कुछ अलग-अलग दृष्टिकोणों के साथ विभिन्न त्रुटियों में भाग गया। दूसरी विधि ऐसा लगता है कि यह होस्टिंग मशीन पर निर्भर नहीं है। एक साझा मेजबान के साथ, यह एक असुरक्षित धारणा नहीं है? – Tyrsius

+0

आप एक हफ्ते में एकमात्र नया जवाब हैं, ऐसा लगता है कि आप डिफ़ॉल्ट रूप से बाउंटी प्राप्त करते हैं। – Tyrsius

+0

@Tyrsius - थोड़ा देर हो चुकी है, लेकिन अगर कोई आपकी उम्मीदों को पूरा नहीं करता है तो आपको बक्षीस देना नहीं है। प्रश्न पर वापस जाएं: यदि आप धारणा बना रहे हैं कि होस्टिंग मशीन बदल सकती है तो आपको एक एन्क्रिप्शन कुंजी को एक सुलभ कुंजी में स्टोर करने की आवश्यकता होगी, जैसे कि एक और ऐपसेटिंग। मैं इससे बचने की कोशिश कर रहा था क्योंकि इसका मतलब है कि अगर कोई आपके वेब.कॉन्फिग को डाउनलोड करने का प्रबंधन करता है तो वे आपकी पेपैल जानकारी को डिक्रिप्ट करने के लिए कुंजी का उपयोग करने में सक्षम होंगे। आप अपने वेब होस्ट से संपर्क क्यों नहीं करते हैं और उनसे पूछें कि क्या आप मेजबान बदल रहे हैं या नहीं; शायद यह कुछ भी नहीं है जिसके बारे में आपको चिंता करने की भी आवश्यकता है। – Peter