2010-07-09 18 views
5

मैं ऐसी वेबसाइट बना रहा हूं जहां उपयोगकर्ता एमपी 3 फ़ाइलों को अपलोड कर सके। और, मैं यह जांचना चाहता हूं कि फ़ाइल एक एमपी 3 फ़ाइल है या नहीं। मुझे यह जानने की ज़रूरत है कि क्या कोई php फ़ंक्शन है जो मेरे लिए ऐसा करता है।PHP वास्तविक फ़ाइल प्रकार

मैं $_FILES['uploadedfile']['type']

की कोशिश की लेकिन, मुझे जैसे मैं चाहता हूँ काम नहीं करता है, क्योंकि यह विस्तार के आधार पर फ़ाइल प्रकार रिटर्न

तो, सवाल कर रहे हैं (मैं इसे केवल खिड़कियों पर परीक्षण):

  1. PHP मूल कार्यों के साथ ऐसा करने का एक सुरक्षित तरीका है ??
  2. एक्सटेंशन के आधार पर फ़ाइल प्रकार, एक PHP मुद्दा है या ओएस से संबंधित है?
  3. आप मुझे क्या सलाह देते हैं ??

धन्यवाद।

+0

[यह जांचने के लिए कि फ़ाइल छवि या वीडियो प्रकार PHP संस्करण 5.2.9 में है या नहीं?] (Http://stackoverflow.com/questions/3074527/how-to-check-whether-file-is-image-or -विडियो-टाइप-इन-php-version-5-2-9) getID3 के लिए – Gordon

उत्तर

7

1- PHP मूल कार्यों के साथ ऐसा करने का एक सुरक्षित तरीका है ??

एमपी 3 के लिए, PHP मूल कार्यों के साथ नहीं, नहीं।

fileinfo है जो ओएस की "एमआईएमई स्नीफिंग" कार्यक्षमता का उपयोग करता है। अगर स्थापित है, तो यह आमतौर पर बहुत विश्वसनीय है।

वैकल्पिक रूप से, getID3 लाइब्रेरी का दावा एमपी 3 फ़ाइलों से जानकारी निकालने में सक्षम होने का दावा करता है। यदि आप फ़ाइल से खेल का समय प्राप्त कर सकते हैं, तो संभावना है कि यह एक वैध एमपी 3 फ़ाइल है।

2- विस्तार पर आधारित फ़ाइल प्रकार, एक PHP मुद्दा है या ओएस से संबंधित है?

न तो। ब्राउज़र फ़ाइल प्रकार (आमतौर पर एक्सटेंशन के अनुसार) निर्धारित करता है और एक एमआईएमई प्रकार भेजता है। किसी भी आने वाले डेटा के साथ, यह नकली के लिए बहुत आसान है और कभी भरोसा नहीं किया जा सकता है।

+1

+1 समान ग्राउंड को कवर करता है। मैंने यह जांचने से पहले इसका उपयोग किया है कि क्विकटाइम मूवी में स्ट्रीमिंग संकेत हैं या नहीं। बहुत, बहुत उपयोगी। –

1

आप एमआईएमई प्रकारों को देखना चाहते हैं। PHP के fileinfo एक्सटेंशन ऐसा करने का पसंदीदा तरीका है।

2

मैं इस बाहर की जाँच होगी:

http://getid3.sourceforge.net/

आप इस का उपयोग कर सकते हैं मान्य है कि यह एक ऑडियो फ़ाइल है और इसके बारे में जानकारी पाने के लिए।

1

फ़ाइल अपलोड होने के बाद फ़ाइल खोलें और यह देखने के लिए पहले कुछ बाइट्स देखें कि यह एमपी 3 फ़ाइल हेडर में क्या होना चाहिए।

+0

पहले कुछ बाइट्स ID3 –

+0

भी हो सकते हैं मैंने नहीं कहा कि पहले कुछ बाइट्स क्या हो सकते हैं, इसलिए मुझे यकीन नहीं है कि यह मेरे उत्तर पर कैसे लागू होता है। क्या आप वाकई इसका मतलब किसी अन्य उत्तर में से किसी एक के जवाब के रूप में नहीं करते थे? – GrandmasterB

3

एमपी 3 क्या है इसका सवाल थोड़ा ऊन है। एमपी 3 फ़ाइलों में आम तौर पर स्टार्ट और/या अंत में चाफ का एक गुच्छा होता है जो मान्य एमपी 3 फ्रेम नहीं है। आम तौर पर यह आईडी 3 टैग धारण करने के लिए है, लेकिन अन्य कारणों के लिए अंत में बकवास डेटा के साथ एमपी 3 को पूरा करना असामान्य नहीं है (उदाहरण के लिए। भद्दा स्ट्रीम चॉपिंग)।

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

यह विस्तार के आधार पर फ़ाइल प्रकार रिटर्न

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

PHP मूल कार्यों के साथ ऐसा करने का एक सुरक्षित तरीका है ??

'सुरक्षित' के साथ आपका इरादा क्या है? यदि आपका उद्देश्य उन लोगों को एमपी 3 फ़ाइलों को अपलोड करना बंद करना है जो वास्तव में अन्य फाइल प्रकारों को छिपाने में हैं- आम तौर पर क्रॉस-साइट-स्क्रिप्टिंग हमलों के लिए HTML, जावा या फ़्लैश सामग्री को इंजेक्शन देने के प्रयोजनों के लिए- तो ऐसा करने का कोई यथार्थवादी तरीका नहीं है। आप उन फाइलें बना सकते हैं जो वैध एमपी 3 हैं और फिर भी एक ही समय में एक और प्रकार के रूप में व्याख्या की जा सकती है। ('गिफर' हमले देखें; एमपी 3 के साथ भी यही संभव है।)

अंत में एक्सएसएस हमलों से विश्वसनीय रूप से आपकी रक्षा करने वाला एकमात्र दृष्टिकोण एक अलग होस्टनाम से अविश्वसनीय उपयोगकर्ता द्वारा अपलोड की गई फ़ाइलों को सेवा प्रदान करना है जो कोई सुरक्षा संदर्भ साझा नहीं करता है मुख्य साइट, इसलिए इसमें क्रॉस-साइट-स्क्रिप्टिंग कुछ हासिल नहीं करती है। एक आंशिक समाधान जिसे आप Content-Disposition: attachment शीर्षलेख के साथ अपनी सभी फ़ाइलों को सेवा देने के लिए भी विचार कर सकते हैं (यदि आपको छवियों को होस्ट करने की आवश्यकता नहीं है जो किसी पृष्ठ में इनलाइन प्रदर्शित की जाएंगी)।

+0

हाँ, मुझे नहीं पता। मैं हमेशा देखता हूं कि यूट्यूब आपको कुछ भी अपलोड करने देता है, लेकिन यदि कोई वीडियो नहीं है तो यह आपको "क्षमा" कहता है। मुझे लगता है कि मेरे पास बहुत अधिक जानकारी है जो मैं चाहता हूं। धन्यवाद। – mRt

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