2010-10-05 10 views
6

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

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

क्या कोई मुझे सही दिशा में इंगित कर सकता है? मैं डेटा सुरक्षित करने के लिए बहुत नया हूँ।

संपादित करने के लिए संपादित किया गया: मैंने अपने होस्ट के साथ जांच की और मैक्रिप्ट स्थापित है। क्या यह सही दिशा में देखने के लिए है?

+0

आप मेजबान कंपनी के व्यवस्थापक से अपने डेटा की रक्षा नहीं कर सकते हैं। सिद्धांत में बस संभव नहीं है। –

+0

हम होस्ट व्यवस्थापक से डेटा की रक्षा करने की कोशिश नहीं कर रहे हैं; हम सिर्फ यह सुनिश्चित करना चाहते हैं कि वे हैक हो जाएं और हमारे डेटाबेस से समझौता किया गया है, हमारे भुगतान गेटवे की चाबियां सादा पाठ नहीं हैं। – EmmyS

उत्तर

2

mcrypt अपने दोस्त यहाँ हो सकता है। आपको ध्यान में रखना आवश्यक है, हालांकि, यह है कि प्रत्येक सार्वजनिक रूप से उपलब्ध (और उपयोगी) एन्क्रिप्शन विधि के लिए एक कुंजी की आवश्यकता होती है। यदि एईएस एन्क्रिप्शन या 3 डीईएस एन्क्रिप्शन को एन्क्रिप्शन प्रक्रिया के दौरान एक कुंजी की आवश्यकता नहीं होती है तो एन्क्रिप्शन तोड़ना केवल एक मानक परिणाम प्राप्त करने तक हर मानक डिक्रिप्शन विधि को आजमाने का मामला होगा। इस प्रकार, आपके भुगतान गेटवे के लिए कुंजी संग्रहीत करने से आपके एन्क्रिप्शन के लिए कुंजी संग्रहीत करने के समान सटीक जोखिम होते हैं। इससे कोई फर्क नहीं पड़ता कि एन्क्रिप्शन की कितनी परतें आप जोड़ना चाहते हैं, कुछ स्तर पर सादे पाठ में एक कुंजी संग्रहित की जानी चाहिए, आमतौर पर PHP में हार्ड-कोडित और अक्सर config.php फ़ाइल में इसे भविष्य में बदलने में आसान बनाने के लिए ।

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

आपका सर्वोत्तम सर्वोत्तम MCrypt Encrypt और MCrypt Decrypt पर देखना है। इस तरह यदि आपके PHP को समझौता किया गया है तो वे उस कुंजी को जानते हैं जिसका उपयोग आपने एन्क्रिप्ट करने के लिए किया था, लेकिन उनके पास डेटा नहीं है।यदि केवल डेटाबेस से समझौता किया गया है तो उनके पास डेटा है लेकिन वह कुंजी नहीं जिसे आपने एन्क्रिप्ट करने के लिए उपयोग किया था। अगर दोनों समझौता कर रहे हैं, तो आप खराब हो गए हैं। लेकिन अगर दोनों समझौता किए गए हैं तो आप खराब हो जाते हैं इससे कोई फर्क नहीं पड़ता कि आप क्या करते हैं, इसलिए यह एक काफी सुरक्षित मार्ग है।

+0

धन्यवाद, स्टीवन के लिए टोकन बनाने के लिए किया जाता है। मुझे पता है कि यदि कोड और डेटाबेस दोनों हैंक किए गए हैं, तो हम एक क्रीक हैं। लेकिन यह हर जगह मामला काफी है, है ना? केवल इतना ही है कि आप कर सकते हैं। – EmmyS

+0

एक समस्या है जो मुझे उस समस्या के आसपास वास्तव में पता है, लेकिन इसमें बहुत सी कोड और बहुत अधिक ओवरहेड शामिल है। मैंने एक बार एक सिस्टम बनाया जो तीन कंप्यूटरों का इस्तेमाल करता था। एक "PHP मास्टर" था, एक "डेटाबेस मास्टर" था, और एक "मुख्य मास्टर" था। PHP मास्टर के पास डेटाबेस मास्टर की कुंजी थी, डेटाबेस मास्टर के पास मास्टर मास्टर की कुंजी थी, और कुंजी मास्टर के पास डेटाबेस मास्टर के भीतर डेटा के लिए कुंजी का डेटाबेस (डेटा की प्रत्येक पंक्ति के लिए एक) था। मेरे पास हार्ड ड्राइव एन्क्रिप्टेड पर सभी PHP भी थे और कंप्यूटर बूट होने पर इसे रैम ड्राइव में डिक्रिप्ट किया गया था। – stevendesu

+0

हाँ, मुझे यकीन नहीं है कि हमारा ग्राहक जो काम करेगा, उसके लिए भुगतान करने को तैयार होगा। इसके अलावा, फिर से - साइट क्लाउड होस्ट की गई है, इसलिए हमें चीजों को एक ही स्थान पर रखना होगा। (और जब भी आप मुख्य मास्टर का जिक्र करते हैं, तो मैं चिल्लाहट और सोचने में मदद नहीं कर सकता, "केवल जूल है" ...) – EmmyS

-2

सुरक्षा परिप्रेक्ष्य से, php फ़ाइलों या डेटाबेस में इसे संग्रहीत करके कोई अंतर नहीं है, अगर किसी के पास आपकी PHP फ़ाइलों तक पहुंच है तो उसके पास डेटाबेस तक पहुंच भी है।

mcrypt के साथ काम करने का मतलब यह नहीं आप अधिक सुरक्षा करनी होगी (अगर वे अपने php फ़ाइलों को पढ़ सकता वे कुंजी के रूप में अच्छी तरह से पढ़ सकते हैं) तो ...

अगर मैं तुम्हें थे मैं दुकान चाहते हैं वेब सर्वर निर्देशिका के बाहर एक फ़ाइल पर सादे पाठ में एपीआई कुंजी।

बस अच्छा कोड लिखें जो आपको ठीक होना चाहिए।

+0

हम इसे सुरक्षित बनाने के लिए डेटाबेस में संग्रहीत नहीं कर रहे हैं; हम इसे कर रहे हैं ताकि हम एक गैर-कोडर को आवश्यक होने पर मूल्य बदलने के लिए फ्रंट-एंड लिख सकें। उस ने कहा, हम इसे सादा पाठ में संग्रहित नहीं करना चाहते हैं। और फिर - यह साइट क्लाउड होस्टेड है; हमारे पास दिए गए वेब सर्वर स्थान के बाहर निर्देशिकाओं तक पहुंच नहीं है। – EmmyS

+0

असल में, आपको हमेशा यह मानना ​​चाहिए कि दूरस्थ सर्वर के विभिन्न घटक व्यक्तिगत सुरक्षा जोखिम हैं। PHP कोड समझौता किए बिना डेटाबेस की पंक्तियों को वापस करने के लिए एसक्यूएल इंजेक्शन या सरल विकृत प्रश्नों के माध्यम से यह संभव है। यही कारण है कि आप हमेशा हैश पासवर्ड- बस अगर किसी को अपना डेटाबेस मिला। इंद्रियों का आविष्कार इंद्रधनुष तालिका के हमलों को रोकने के लिए किया गया था, और बस एक मैक्रिप्ट कुंजी की तरह- अगर किसी को नमक मिला तो वे उसे बाधित कर सकते हैं और अभी भी इंद्रधनुष तालिका का उपयोग कर सकते हैं। – stevendesu

+0

मुझे नहीं पता कि लोग जो कहा है, वह लोग क्यों कम कर रहे हैं, अगर आपको लगता है कि आप इसे करने से अधिक सुरक्षित रहेंगे, तो यह कोई चीज़ नहीं बदलेगी। इस तरह की सुरक्षा से निपटने के लिए आपके पास एक बहुत ही अलग बुनियादी ढांचा होना चाहिए, आप एक एपीआई कुंजी संग्रहित कर रहे हैं, आपके पास एक सादा txt कोड के साथ हैश के साथ एक ही "सुरक्षा" होगी। आप अपनी डीबी कनेक्शन फाइल कहां स्टोर कर रहे हैं: पी? आपको बहुत अच्छी तरह जांच करनी चाहिए कि इसके बजाय एपीआई कुंजी को क्या करने की अनुमति है। मेरा मतलब है कि एपीआई कुंजी परिभाषित आईपी आदि से केवल कुछ चीजें करने में सक्षम होना चाहिए ... – sathia

0

हम्म, आप एईएस एन्क्रिप्शन आज़मा सकते हैं। समस्या यह है कि आपको अपने PHP में नमक हैश (98sdfx9c6v5c) को कहीं सेव करना होगा।

सम्मिलित config:

INSERT INTO config (secret_key) VALUES (AES_ENCRYPT('secret api key','98sdfx9c6v5c')); 

चयन config:

SELECT AES_DECRYPT(secret_key,'98sdfx9c6v5c') AS secret_url FROM config 
संबंधित मुद्दे