2008-08-21 117 views

回答

17

使用fileperms()功能

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

你想干什么通过检查文件的权限吗?

在编写安全的代码,它几乎总是不正确的“检查,然后做”任何事情。原因是在检查你是否可以做某件事情并且真正做到它之间,系统的状态可能会发生变化,因此这样做会产生不同的结果。

例如,如果你检查是否写一个前一个文件存在,不检查是否成功写的文件(或不详细,够时尚检查),再后来取决于内容您写的文件,实际上您可能正在读取攻击者写入的文件。

因此,而不是检查文件的权限,只是做不管它是什么,你打算做的,如果权限检查成功,并妥善处理错误。

+1

总有一些可行的原因,检查权限,也许他建立一个守护进程固定的权限,这没有按”不要依赖他的脚本来读取或写入文件,因为不同的过程将会这样做。 – 2011-05-20 14:44:56

+1

另一个例子是一个rewriteMap程序,它作为基于某些文件权限的门。 – puk 2012-03-21 16:45:08

1

使用fileperms()功能和子:

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__与路径或变量

6

真实编码器使用位运算,而不是字符串;)这是更优雅的处理权限的方式:

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