如何检查file permissions
,而无需通过passthru()
或exec()
运行特定于操作系统的命令?
答案 0 :(得分:20)
使用fileperms()功能
clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
答案 1 :(得分:12)
您可以使用is_readable(),is_executable()等命令。
答案 2 :(得分:6)
真正的编码器使用按位运算,而不是字符串;)这是处理权限的更优雅方式:
function checkPerms($path)
{
clearstatcache(null, $path);
return decoct( fileperms($path) & 0777 );
}
答案 3 :(得分: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__
替换为您的路径或变量
答案 4 :(得分:0)
通过检查文件权限,您想要做什么?
在编写安全代码时,“检查,然后执行”几乎总是不正确的。原因是在检查您是否可以执行某些操作并实际执行操作之间,系统的状态可能会发生变化,从而使其执行的操作会有不同的结果。
例如,如果在编写文件之前检查文件是否存在,则不要检查是否成功写入文件(或者不要以足够详细的方式检查),然后再根据文件的内容进行检查。你写的文件,你实际上可能正在阅读攻击者写的文件。
因此,如果权限检查成功,只需执行您要执行的任何操作,而不是检查文件权限,并正常处理错误。