PHP

2010-03-28 4 views
7

में पृष्ठों के बीच सुरक्षित रूप से क्रेडिट कार्ड की जानकारी कैसे पास करें PHP में पृष्ठों के बीच आप क्रेडिट कार्ड की जानकारी कैसे सुरक्षित रूप से पास करते हैं? मैं एक ई-कॉमर्स आवेदन का निर्माण कर रहा हूँ और मैं इस तरह चेकआउट के माध्यम से जाना उन करना चाहते हैं:PHP

दर्ज सूचना -> समीक्षा -> अंतिम रूप आदेश

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

किसी भी मदद की सराहना की जाएगी!

+1

यह एक बुरा विचार है। आपको वास्तविक लाभ के लिए बढ़े जोखिम को संभालना होगा। भुगतान गेटवे क्रेडिट कार्ड नंबरों की पुष्टि कर सकता है, स्क्रीन पर सीसी संख्याओं पर हमला करने और प्रस्तुत करने के लिए सत्र डेटा खुला हो सकता है, इसका मतलब यह हो सकता है कि वे कहीं कैश हो जाते हैं। – Rimian

+0

उसी पृष्ठ पर पुष्टि और भुगतान जानकारी एकत्र करें। –

उत्तर

1

ठीक है, पहले यह सुनिश्चित करने के लिए कि कनेक्शन एन्क्रिप्ट किया गया है, आपको HTTPS प्रोटोकॉल का उपयोग करना चाहिए।

उसके बाद, आप $_SESSION सुपर-ग्लोबल में डेटा स्टोर कर सकते हैं। डेटा आपके सर्वर पर संग्रहीत है, इसलिए यह अपेक्षाकृत सुरक्षित है।

आप एक समान तकनीक कर सकते हैं जहां आप एक ऑर्डर डेटाबेस में जानकारी डालते हैं, जहां कुंजी एक GUID है या कुछ और काफी यादृच्छिक और अद्वितीय है। तब, जब व्यक्ति को बदलें/अपने आदेश की समीक्षा करने के लिए चला जाता है, तो आप आदेश आईडी यूआरएल GET के भाग में संग्रहित किया जाना चाहिए था (या यदि आप एक कुकी/सत्र चर पागल हैं):

https://example.com/order?orderID=akjgflkhaslasdfkjhalsdjkljahs 

करने के लिए अतिरिक्त सुरक्षा प्रदान करें, आप ऑर्डर टेबल में एक आईपी पता भी स्टोर कर सकते हैं, और सुनिश्चित कर सकते हैं कि आईपी और ऑर्डर आईडी मैच।

+0

यदि संभव हो तो मैं अपने सर्वर पर जानकारी संग्रहीत करने की कोशिश नहीं कर रहा हूं – Alex

+2

@Alex पुष्टि पृष्ठ से सर्वर से अनुरोध किया गया है। आप इसे कहां स्टोर करने जा रहे हैं? ग्राहक की ओर? – Rimian

+8

यह पीसीआई-डीएसएस का उल्लंघन है क्योंकि $ _SESSION सादा पाठ में हार्ड ड्राइव पर डेटा लिख ​​देगा। – rook

0

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

बेशक

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

10

मैं wouldn ' इसे कहीं भी स्टोर नहीं करें। यह बहुत अधिक जोखिम है और शायद नैतिक नहीं है।

https पर एक फॉर्म पोस्ट करके भुगतान गेटवे के लिए अनुरोध भेजें और केवल लेनदेन के परिणाम को स्टोर करें।

आप शायद केवल तभी देखभाल करते हैं जब लेनदेन को मंजूरी दे दी गई हो या अस्वीकार कर दिया गया हो। कौन परवाह करता है कि संख्या क्या है?

+0

मैं यहां दिए गए बिंदु से सहमत होने के इच्छुक हूं कि, यदि आप कार्ड की जानकारी (जो एक बुरा विचार नहीं है) को स्टोर न करने का प्रयास कर रहे हैं, तो भुगतान जानकारी जमा करने की प्रक्रिया को संसाधित करने के लिए आप जो भी PHP स्क्रिप्ट उपयोग करते हैं, उसे आगे बढ़ाना चाहिए भुगतान गेटवे या जहां भी इसे जाने की आवश्यकता है, पर जानकारी। इसका मतलब यह है कि चेकआउट प्रक्रिया के हिस्से के रूप में क्रेडिट कार्ड की जानकारी को आखिरी चीज की आवश्यकता होती है। –

+1

+1, ऑसी _before_ सीसी जानकारी दर्ज करने के आदेश की समीक्षा करना आम है। यहां व्यापार तर्क सिर्फ पीछे की तरफ है। –

+2

वास्तव में, यह सुनिश्चित करने के लिए कि आप सही शिपिंग/बिलिंग जानकारी – Alex

8

सत्र में क्रेडिट कार्ड की जानकारी संग्रहीत न करें, इसे किसी डेटाबेस में संग्रहीत न करें, इसे फ़ाइल में संग्रहीत न करें। इसके बजाय, एक छिपे हुए HTML इनपुट में समीक्षा पृष्ठ पर सीसी जानकारी वापस लिखें।

तो प्रोग्राम प्रवाह इस तरह काम करेगा:

  1. उपयोगकर्ता पोस्ट को भुगतान और एक HTML फ़ॉर्म के माध्यम से सर्वर के लिए बिलिंग जानकारी।
  2. सर्वर पुष्टि करता है कि इस जानकारी को सही स्वरूप में है (यानी, क्रेडिट कार्ड अंक की उचित संख्या है, उसका बिलिंग पता दर्ज किया गया था, आदि)
  3. सत्यापन के बाद सर्वर सभी जानकारी छिपा फार्म के रूप में प्रस्तुत वापस लिखता है इनपुट फ़ील्ड इसमें बिलिंग पता, शिपिंग पता और क्रेडिट कार्ड जानकारी शामिल है।
  4. समीक्षा पृष्ठ (छिपे हुए इनपुट फ़ील्ड के साथ) पर फ़ॉर्म "फिनिश ऑर्डर"/"पूर्ण ऑर्डर" लेबल वाला एक बटन है। यह समीक्षा अंतिम आदेश स्क्रिप्ट को पोस्ट करती है।
  5. अंतिम स्क्रिप्ट आपके डेटाबेस में बिलिंग/शिपिंग जानकारी संग्रहीत करता है और क्रेडिट कार्ड जानकारी को आपके भुगतान गेटवे में जमा करता है।

    1. आप भूमि के ऊपर और अतिरिक्त PCI अनुपालन कि जब क्रेडिट जानकारी संग्रहीत करने के लिए आवश्यक है की लागत बचाने के लिए:

    इस विधि के लाभ दो गुना कर रहे हैं।

  6. यह विधि एसएसएल प्रोटोकॉल की सुरक्षा सीमाओं के भीतर रहता है। मतलब, एन्क्रिप्टेड क्रेडिट कार्ड जानकारी किसी भी उदाहरण में आपके सर्वर पर जमा करनी होगी - यह विधि लगातार क्रेडिट कार्ड डेटा की जटिलताओं को पेश किए बिना, एसएसएल की प्रभावकारिता पर भरोसा करती है।

यह अंतिम बिंदु एक और चिंता उठाता है - एक समीक्षा पृष्ठ करके आप नेटवर्क पर एन्क्रिप्टेड क्रेडिट कार्ड डेटा प्रसारित होने की संख्या को दोगुना कर रहे हैं। इस विधि के साथ न्यूनतम 4 प्रसारण हैं: सर्वर से क्लाइंट, क्लाइंट के लिए सर्वर, सर्वर से क्लाइंट (फिर से) तो सर्वर गेटवे पर सर्वर। समीक्षा के बिना न्यूनतम 2 प्रसारण होते हैं: क्लाइंट से सर्वर और सर्वर गेटवे तक। अतिरिक्त प्रसारण के जोखिम के लायक एक समीक्षा पृष्ठ की सुविधा है? यह एक निर्णय है कि आप एक वेब डेवलपर (और आपका ग्राहक) बनाना चाहते हैं।

+0

मैं सोच रहा था, लेकिन क्या मुझे क्रेडिट कार्ड की जानकारी पर कुछ प्रकार का सर्वर-साइड एन्क्रिप्शन करना चाहिए इससे पहले कि मैं उन्हें छुपा फॉर्म इनपुट फ़ील्ड के रूप में वापस लिखूं? यदि हां, तो मुझे इस विधि से कैसे संपर्क करना चाहिए? डिजिटली हस्ताक्षर करें? – Alex

+2

इस विधि के साथ आप सर्वर पर कहीं भी सीसी जानकारी संग्रहीत नहीं करेंगे, इसलिए आप सर्वर से/सीसी डेटा संचारित करने के लिए SSL एन्क्रिप्शन पर भरोसा कर पाएंगे। – leepowers

+0

मुझे उत्सुकता है कि यदि एक छिपे हुए फॉर्म इनपुट में सीसी जानकारी को तकनीकी रूप से ब्राउज़र द्वारा कैश किया जा सकता है और उपयोगकर्ता की हार्ड ड्राइव पर अस्थायी कैश फ़ाइल में संग्रहीत किया जा सकता है। वैसे भी इसे रोकने के लिए? शायद किसी को यादृच्छिक कुंजी उत्पन्न करनी चाहिए और उस सत्र में स्टोर करना चाहिए, और उसके बाद छुपा फॉर्म फ़ील्ड में सीसी जानकारी एन्क्रिप्ट करने के लिए उस कुंजी का उपयोग करें। एक बार समीक्षा पृष्ठ पोस्ट हो जाने पर, कोई मान को डिक्रिप्ट करने और क्रेडिट कार्ड प्रोसेसर को पास करने के लिए सत्र कुंजी का उपयोग कर सकता है ... – stereoscott

0

मुझे लगता है कि मुझे सहमत होना होगा। क्रेडिट कार्ड नंबर संग्रह करना बहुत बड़ा जोखिम है और परिणाम दूर किए जा सकते हैं।

आदर्श तरीका किसी तृतीय पक्ष प्रोसेसर को जानकारी पास करना होगा और केवल आपके स्क्रिप्ट तर्क को मोल्ड करने के लिए परिणाम का उपयोग करना होगा।

if (transaction){ 
    // code goes here 
} 
else{ 
    // code goes here 
} 

आशा है कि आप बात समझ ... :)

1

एक वैकल्पिक Authorize.net's Customer Information Manager की तरह किसी भुगतान प्रोफ़ाइल सेवा का उपयोग करने के लिए है (वहाँ दूसरों भी कर रहे हैं)। आप अपनी एपीआई के माध्यम से प्रोफाइल में भुगतान जानकारी संग्रहीत करते हैं, फिर वास्तव में कार्ड चार्ज करते समय प्रोफ़ाइल आईडी का उपयोग करें। इस तरह आप कभी भी अपने सर्वर पर डेटा संग्रहीत नहीं कर रहे हैं।

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

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