मैं यह निर्धारित करने की कोशिश कर रहा हूं कि मैं एक फ़ोल्डर या फ़ाइल देख रहा हूं या नहीं। मैंने निम्नलिखित दृष्टिकोण किया। इसके बजाय अगर यह जांचता है कि यह एक फ़ोल्डर है, तो यह और जाता है। मेरा प्रश्न है: मैं कैसे निर्धारित करूं कि मैं किसी फ़ोल्डर या फ़ाइल को देख रहा हूं या नहीं?

<cfif structKeyExists(URL, 'method') and URL.method eq 'download'>
<cfset folder_name = URL.folder_id />
<cfset file_name = URL.name />

<cfif findNoCase('.dir', folder_name) >
    <a href="subfolder_files.cfm?method=download&path=#folder_name#&folder_id=#file_name#">hi</a>
<cfelse>
    <a href="process_file_page.cfm?method=download&folder_id=#file_name#&name=#URLEncodedFormat(Name)#"></a>
</cfif>
<cfabort>
1
Roberto Flores 26 मार्च 2020, 20:18

1 उत्तर

सबसे बढ़िया उत्तर

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

क्या फ़ोल्डर नामों में स्ट्रिंग .dir है? क्योंकि उस स्थिति की जाँच की जा रही है। अगर वे ऐसा नहीं करते हैं, तो इसीलिए यह हमेशा else स्थिति में रहता है।

<cfif findNoCase('.dir', folder_name) >

फ़ाइल का अनुरोध करने का प्रयास करने से पहले यह देखने के लिए कि क्या फ़ाइल नाम के विरुद्ध directoryExists() फ़ोल्डर पथ के विरुद्ध और fileExists() का उपयोग करें।

फ़ाइल पथ और नाम को डीबी में सहेजना एक बेहतर तरीका होगा, फिर क्वेरी स्ट्रिंग में आईडी द्वारा फ़ाइल का अनुरोध करें। फ़ाइल को वेब रूट के बाहर भी संग्रहीत किया जाना चाहिए ताकि वे सार्वजनिक रूप से सुलभ फ़ोल्डर में न हों और एप्लिकेशन में लॉग इन किए बिना उस तक पहुंचा न जा सके। एक बार जब आपको सही फ़ाइल मिल जाए, तो ब्राउज़र में फ़ाइल डाउनलोड करने के लिए <cfcontent> का उपयोग करें।

5
Adrian J. Moreno 26 मार्च 2020, 18:57