2012-09-30 5 views
8

मेरे ऐप उपयोगकर्ता अपनी फाइलें एक बाल्टी में अपलोड करते हैं। मैं कैसे सुनिश्चित कर सकता हूं कि मेरी एस 3 बाल्टी में प्रत्येक ऑब्जेक्ट में ऑब्जेक्ट को ओवरराइट होने से रोकने के लिए एक अनूठी कुंजी है?अमेज़ॅन एस 3 प्रत्येक ऑब्जेक्ट के लिए अद्वितीय कुंजी बना रहा है

फिलहाल मैं अपने php स्क्रिप्ट में एक यादृच्छिक स्ट्रिंग के साथ फ़ाइल नामों को एनक्रिप्ट कर रहा हूँ एस 3 के लिए फ़ाइल भेजने से पहले।

चर्चा के लिये की है कि अपलोडर अपलोड पर फ़ाइल नाम में हेरफेर करने के लिए एक तरह से पाता है लगता करते हैं। वह banana की तस्वीर के साथ मेरी साइट पर सभी छवियों को प्रतिस्थापित करना चाहता है। एन्क्रिप्शन विफल होने पर एस 3 में फ़ाइलों को ओवरराइट करने से रोकने का एक अच्छा तरीका क्या है?

संपादित करें: मैं वर्ज़निंग क्योंकि मैं जब मेरी बाल्टी से छवियों को प्रदर्शित करने में एक छवि URL में एक संस्करण आईडी निर्दिष्ट नहीं कर सकते काम करेंगे नहीं लगता।

उत्तर

3

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

आप प्रत्येक फ़ाइल नाम के लिए एक यादृच्छिक स्ट्रिंग पहले जोड़ें, तो एन्ट्रापी की एक यथोचित विश्वसनीय स्रोत का उपयोग कर, आप किसी भी मुद्दे नहीं होना चाहिए, लेकिन आप की जाँच करनी चाहिए फ़ाइल पहले से ही वैसे भी मौजूद है या नहीं। यद्यपि S3::GetObject का उपयोग करके चेक करने के लिए एक लूप को कोडिंग करते हुए, और एक नई यादृच्छिक स्ट्रिंग जेनरेट करने के लिए लगभग कुछ प्रयास करने की प्रतीत होती है जो लगभग कभी भी चलाने की आवश्यकता नहीं होती है, "लगभग कभी नहीं" का अर्थ है कि अंत में होने की संभावना अधिक है।

+0

जवाब देने के लिए धन्यवाद! मैं एक यादृच्छिक स्ट्रिंग के लिए एन्क्रिप्ट कर रहा हूँ। मुझे लगता है कि फ़ाइल पहले से मौजूद है या नहीं, यह जांचने का अनुमान है कि अगर मैं एक अतिरिक्त एस 3 अनुरोध करता हूं तो भी सबसे अच्छा समाधान है। या अगर मैं डेटाबेस में सभी फाइल जानकारी संग्रहीत करता हूं तो मैं डीएसबी टेबल को mysql के साथ देख सकता हूं। – CyberJunkie

+1

जैसा कि मैंने ऊपर बताया है, फ़ाइल नाम एन्क्रिप्ट करना सबसे प्रभावी समाधान नहीं है। आप नाम को यादृच्छिक स्ट्रिंग के साथ बदल सकते हैं, और मैपिंग को अपने डेटाबेस में स्टोर कर सकते हैं। 'Openssl_random_pseudo_bytes()' देखें। –

+2

@TerenceJohnson, "लगभग कभी नहीं" केवल यादृच्छिक बिट्स जोड़कर "मनमाने ढंग से असंभव" हो सकता है। एस 3 के लिए अतिरिक्त यात्रा करना आपके सेवा समय को चोट पहुंचाने जा रहा है। – Fantius

0

यह काम करेगा अपलोड करने से पहले उस नाम के साथ एक फ़ाइल के लिए जाँच हो रही है।

फ़ाइल पहले से मौजूद हैं, तो फ़ाइल नाम फिर से randomize, और फिर कोशिश करें।

+11

आपके द्वारा चेक किए जाने के बाद और आपके डेटा को रखने से पहले उस नाम वाली एक फ़ाइल बनाई जा सकती है। यही है, दो संचालन लेनदेन में नहीं हैं। – ivant