考虑一个用PHP编写的简单文件上传系统。用户只能在管理面板中访问。 (不是FTP)。出于安全问题,他可能会将文件夹选项从707更改为755。 怎么办呢?我们可以从上传脚本执行此操作吗?如果是,这是一个安全的应用程序吗?
答案 0 :(得分:3)
您可以使用chmod。每个文件系统操作都有运行风险,因此请考虑用户可能尝试更改其他文件的权限,以便您 来清理输入。
bool chmod ( string $filename , int $mode )
尝试改变模式 指定文件到模式中给出的文件。
答案 1 :(得分:2)
我们在上传脚本时无法做到这一点,这不是任何人都可以破解它的安全方式。 我只能在文件上传页面代码中通过ftp提供chmod来完成。
答案 2 :(得分:2)
此脚本会删除所有脏东西并检查目录中的白色文件列表。如果文件存在于目录中,则结果为true,否则为黑客攻击
function WhitePage($page) {
$info2 = apache_lookup_uri('src/index.php?p=' . $page);
list($arg, $val) = explode("=", $info2->args);
$myrequest = basename(htmlspecialchars_decode($val));
return $myrequest;
}
function Read_Dir($dir, $array = array()) {
$dh = opendir($dir);
$files = array();
while (($file = readdir($dh)) !== false) {
$flag = false;
if ($file !== '.' && $file !== '..' && !in_array($file, $array)) {
$files[] = trim($file);
}
}
return $files;
}
function WhiteList($page = null) {
$info2 = apache_lookup_uri('src/index.php?p=' . $page);
list($arg, $val) = explode("=", $info2->args);
// basename from the std class
$myrequest = basename(htmlspecialchars_decode($val));
$myrequest = trim($myrequest . '.php');
//pathinfo from the std class
$path = pathinfo($info2->filename);
// get the files array
$whitefiles = Read_Dir($path['dirname']);
if (in_array($myrequest, $whitefiles, true)) {
$res = 1;
} else {
$res = 0;
}
return $res;
}
// this is solution of this kind of the problems
//$p='index.php?p=../../../../../../../../etc/passwd%00index.html';
$p = '../../../../../../../../etc/passwd%00index.html';
$p = WhitePage($p);
$result = WhiteList($p);
if ($result) {
echo 'ok';
} else {
echo 'Die ,You evil hacker';
}
答案 3 :(得分:0)
看起来你不了解网络服务器的工作方式。它只有一个system user
ans,无需更改site users
的任何权限。
要实现ACL功能,需要一个数据库来保存用户和权限,以及一些手动下载方法实现,一个简单的(正确的头文件+ readfile())或一个更复杂的解决方案,如nginx的x_accel_redirect