Frage

Wie kann ich das überprüfen? file permissions, ohne dass ein betriebssystemspezifischer Befehl über ausgeführt werden muss passthru() oder exec()?

War es hilfreich?

Lösung

Verwenden fileperms() Funktion

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

Andere Tipps

Du kannst den ... benutzen is_readable(), is_executable() usw..Befehle.

Echte Programmierer verwenden bitweise Operationen, keine Strings ;) Dies ist eine viel elegantere Art, mit Berechtigungen umzugehen:

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

Verwenden fileperms() Funktion und Teilzeichenfolge:

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

Zur Datei:

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

Ersetzen __FILE__ Und __DIR__ mit Ihrem Pfad oder Ihrer Variablen

Was möchten Sie tun, indem Sie die Dateiberechtigungen überprüfen?

Beim Schreiben von sicherem Code ist es fast immer falsch, etwas „zu prüfen und dann zu tun“.Der Grund dafür ist, dass sich der Zustand des Systems zwischen der Überprüfung, ob Sie etwas tun können, und dem tatsächlichen Ausführen ändern kann, sodass die Ausführung zu einem anderen Ergebnis führt.

Wenn Sie beispielsweise prüfen, ob eine Datei vorhanden ist, bevor Sie eine Datei schreiben, überprüfen Sie nicht, ob Sie die Datei erfolgreich geschrieben haben (oder prüfen Sie nicht detailliert genug), und verlassen Sie sich später auf den Inhalt der Datei, die Sie geschrieben haben , könnten Sie tatsächlich eine von einem Angreifer geschriebene Datei lesen.

Anstatt also die Dateiberechtigungen zu überprüfen, tun Sie einfach das, was Sie tun würden, wenn die Berechtigungsprüfung erfolgreich war, und behandeln Sie Fehler ordnungsgemäß.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top