我的代码中是否存在任何文件上传安全漏洞?我在服务器端使用apache。在php.ini文件中启用了文件上传。
<?php
if ($_FILES["file"]["size"] < 100000)//maximum upload size is 100 kb
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
$var="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$samp=str_shuffle($var);
$pass=substr($samp,0,20);// creating a random text for file name.
$ext = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);
$ext=".{$ext}";
$newfilename="upload/".$pass.$ext;
rename("upload/".$_FILES["file"]["name"],$newfilename );
echo "Stored in: " . $newfilename;
echo "<br>extension : ".$ext;
}
}
}
else
echo "File size is too large..";
?>
答案 0 :(得分:2)
可能,是的。
如果有人上传了PHP文件会怎么样?他们能够确定文件名,文件URL并运行PHP文件吗?
如果是这样,该程序可以使用scandir()函数获取所有文件名的列表。
为防止这种情况,您可以将文件存储在DocumentRoot路径之外,拒绝接受.php文件,或使用.htaccess在该目录中关闭PHP引擎。