سؤال
كيف يمكنني التحقق file permissions
, ، دون الحاجة إلى تشغيل أمر محدد لنظام التشغيل عبر passthru()
أو exec()
?
المحلول
يستخدم ملفات () وظيفة
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
نصائح أخرى
يمكنك استخدام ال قابل للقراءة (), قابل للتنفيذ () إلخ..الأوامر.
يستخدم المبرمجون الحقيقيون عمليات البت، وليس السلاسل؛) هذه طريقة أكثر أناقة للتعامل مع الأذونات:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}
يستخدم ملفات () الوظيفة والسلسلة الفرعية:
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__
مع المسار الخاص بك أو المتغير
ماذا تريد أن تفعل عن طريق التحقق من أذونات الملف؟
عند كتابة رمز آمن، غالبًا ما يكون من غير الصحيح "التحقق ثم القيام" بأي شيء.والسبب هو أنه بين التحقق مما إذا كان بإمكانك فعل شيء ما والقيام به بالفعل، يمكن أن تتغير حالة النظام بحيث يكون للقيام بذلك نتيجة مختلفة.
على سبيل المثال، إذا قمت بالتحقق من وجود ملف قبل كتابته، فلا تتحقق مما إذا كنت قد كتبت الملف بنجاح (أو لا تتحقق بطريقة تفصيلية كافية)، ثم اعتمد لاحقًا على محتويات الملف الذي كتبته قد تكون في الواقع تقرأ ملفًا كتبه أحد المهاجمين.
لذا بدلاً من التحقق من أذونات الملف، ما عليك سوى القيام بكل ما كنت ستفعله إذا نجح التحقق من الأذونات، والتعامل مع الأخطاء بأمان.