2008-08-21 16 views

उत्तर

17

उपयोग fileperms() समारोह

clearstatcache(); 
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4); 
0

फ़ाइल अनुमतियों की जांच करके आप क्या करना चाहते हैं?

सुरक्षित कोड लिखते समय, "हमेशा जांचें, फिर करें" कुछ भी गलत है। इसका कारण यह है कि जांच के बीच कि आप कुछ कर सकते हैं और वास्तव में ऐसा कर सकते हैं, सिस्टम की स्थिति इस तरह बदल सकती है कि ऐसा करने से अलग परिणाम होगा।

उदाहरण के लिए, यदि आप जांचते हैं कि फ़ाइल लिखने से पहले कोई फ़ाइल मौजूद है या नहीं, तो जांचें कि आपने फ़ाइल को सफलतापूर्वक लिखा है या विस्तृत विवरण में चेक नहीं किया है), और बाद में सामग्री की सामग्री पर निर्भर करता है आपके द्वारा लिखी गई फ़ाइल, आप वास्तव में किसी हमलावर द्वारा लिखी गई फ़ाइल पढ़ सकते हैं।

तो फ़ाइल अनुमतियों की जांच करने के बजाय, अनुमतियाँ सफल होने पर त्रुटियों को संभालने के लिए बस जो कुछ भी किया जा रहा था, वही करें।

+1

वहाँ हमेशा अनुमतियों की जाँच, शायद वह फिक्सिंग अनुमतियों के लिए एक डेमॉन के निर्माण है के लिए संभव कारणों, जो नहीं करता है 'कर रहे हैं फाइलों को पढ़ने या लिखने के लिए अपनी लिपि पर निर्भर नहीं है क्योंकि एक अलग प्रक्रिया ऐसा करने जा रही है। –

+1

एक और उदाहरण एक rewriteMap प्रोग्राम है जो कुछ फ़ाइल अनुमतियों के आधार पर गेट के रूप में कार्य करता है। – puk

11

आप is_readable(), is_executable() आदि का उपयोग कर सकते हैं .. आदेश।

+1

ध्यान रखें कि is_writable() समूह सदस्यता (PHP 5.5.18 के रूप में) की जांच नहीं करता है। – cgeisel

1

उपयोग fileperms() समारोह और सबस्ट्रिंग:

substr(decoct(fileperms(__DIR__)), -4); // 0777 
substr(decoct(fileperms(__DIR__)), -3); // 777 

फ़ाइल के लिए:

substr(decoct(fileperms(__FILE__)), -4); // 0644 
substr(decoct(fileperms(__FILE__)), -3); // 644 

बदलें __FILE__ और __DIR__ अपना रास्ता या चर

साथ
6

रियल कोडर बिटवाइज़ संचालन, नहीं तार का उपयोग करें;) यह बहुत अधिक सुरुचिपूर्ण हैंडलिंग अनुमतियों के तरीका है:

function checkPerms($path) 
{ 
    clearstatcache(null, $path); 
    return decoct(fileperms($path) & 0777); 
} 
+0

यह वापसी, सच/गलत क्या है? – Sam

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