문제

어떻게 확인할 수 있나요? file permissions, 다음을 통해 운영 체제별 명령을 실행할 필요 없이 passthru() 또는 exec()?

도움이 되었습니까?

해결책

사용 파일 권한() 기능

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

다른 팁

당신은 사용할 수 있습니다 읽을 수 있음(), is_executable() 등..명령.

실제 코더는 문자열이 아닌 비트 연산을 사용합니다. 이것은 권한을 처리하는 훨씬 더 우아한 방법입니다.

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