سؤال

كيف يمكنني التحقق 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__ مع المسار الخاص بك أو المتغير

ماذا تريد أن تفعل عن طريق التحقق من أذونات الملف؟

عند كتابة رمز آمن، غالبًا ما يكون من غير الصحيح "التحقق ثم القيام" بأي شيء.والسبب هو أنه بين التحقق مما إذا كان بإمكانك فعل شيء ما والقيام به بالفعل، يمكن أن تتغير حالة النظام بحيث يكون للقيام بذلك نتيجة مختلفة.

على سبيل المثال، إذا قمت بالتحقق من وجود ملف قبل كتابته، فلا تتحقق مما إذا كنت قد كتبت الملف بنجاح (أو لا تتحقق بطريقة تفصيلية كافية)، ثم اعتمد لاحقًا على محتويات الملف الذي كتبته قد تكون في الواقع تقرأ ملفًا كتبه أحد المهاجمين.

لذا بدلاً من التحقق من أذونات الملف، ما عليك سوى القيام بكل ما كنت ستفعله إذا نجح التحقق من الأذونات، والتعامل مع الأخطاء بأمان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top