Sprawdź uprawnienia do plików


14

Jak mogę sprawdzić file permissions, bez konieczności uruchamiania specjalnego polecenia systemu operacyjnego przez passthru() lub exec()?

17

Zastosowanie fileperms() funkcja

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

0

Co chcesz zrobić, sprawdzając uprawnienia do plików?

Podczas pisania kodu bezpieczeństwa prawie zawsze jest niepoprawne wpisywanie "sprawdź, a następnie wykonaj". Powodem jest to, że między sprawdzaniem, czy można coś zrobić, a faktycznie to zrobić, stan systemu może zmienić się tak, że robienie tego będzie miało inny skutek.

Na przykład, jeśli sprawdzisz, czy plik istnieje przed jego zapisaniem, nie sprawdzaj, czy plik został pomyślnie napisany (lub nie sprawdzasz wystarczająco szczegółowo), a później zależy od zawartości plik, który napisałeś, mógłbyś czytać plik napisany przez atakującego.

Zamiast więc sprawdzać uprawnienia do plików, po prostu rób to, co zamierzałeś zrobić, jeśli sprawdzenie uprawnień powiedzie się i zręcznie obsługiwać błędy.

+1

Nie zawsze są wykonalne powody sprawdzanie uprawnień, może on budowę demona o uprawnieniach mocowania, który nie robi” • polegać na swoim skrypcie, aby czytać lub zapisywać pliki, ponieważ inny proces to zrobi. 20 maj. 112011-05-20 14:44:56

+1

Kolejnym przykładem jest program do przeprogramowaniaMap, który działa jako brama na podstawie określonych uprawnień do plików. 21 mar. 122012-03-21 16:45:08


11

Można użyć poleceń is_readable(), is_executable() itd ..

+1

Należy pamiętać, że is_writable() nie sprawdza przypisania do grupy (od PHP 5.5.18). 12 lis. 142014-11-12 22:30:01


1

Zastosowanie fileperms() funkcja i podciąg:

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

dla pliku:

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

Wymień __FILE__ i __DIR__ ze swojej ścieżki lub zmiennym


6

Prawdziwi programiści użyć bitowe operacje, a nie ciągi;) To jest o wiele bardziej elegancki sposób uprawnień do obsługi:

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

Co to zwraca, prawda/fałsz? 06 maj. 142014-05-06 16:08:09