【发布时间】:2013-05-17 21:38:42
【问题描述】:
我想知道我的代码有什么问题,如果我使用 clamscan,无论是从 /tmp 读取还是手动指定路径都可以正常工作。但如果我使用 clamdscan,来自 /tmp 的任何路径都会导致错误(int 结果为 2)。这是代码。
$command = 'clamdscan ' . escapeshellarg($_FILES['file']['tmp_name']);
$out = '';
$int = -1;
exec($command, $out, $int);
echo "\n" . $command;
echo "\n" . $out;
echo "\n This is int = " . $int;
if ($int == 0) {
// all good, code goes here uploads file as normal IE move to
//echo "File path : ".$file."Return code : ".cl_pretcode($retcode);
//echo "\n";
move_uploaded_file($_FILES["file"]["tmp_name"], "filesave/" . $_FILES["file"]["name"]);
echo "Stored in: " . "filesave/" . $_FILES["file"]["name"];
} else {
echo "\n FAILED";
}
根据上面的代码,它会失败,因为$int = 2。但是,如果我将命令更改为
//some file that is saved already in the directory
$command = 'clamdscan ' . '/abc/abc.txt';
效果很好。
只有当命令是 clamdscan 时才会失败。如果我使用clamscan,临时目录就可以了
有什么想法吗?
【问题讨论】:
-
运行
clamddeamon 的用户是否拥有/tmp的权限? -
@dev-null-dweller 嗯..说实话我不知道如何检查。请指导我。我知道 clamscan 工作正常,所以我认为应该是一样的?
-
clamscan以用户调用它的权限运行,但是clamdscan依赖于一个通常使用特权非常有限的特殊帐户运行的恶魔进程。只需检查/tmp和 is 的子目录是否对所有人都可读 -
@dev-null-dweller 如果是这样的话,我只是检查一下,每个人都可以阅读(777)。我尝试在上面放一些文件,然后从命令行运行它(而不是通过 php exec 函数),clamdscan 工作正常
-
嘿@Harts,你找到解决方案了吗?
标签: php security file-upload upload antivirus