这是否完全安全?我想为我的新项目提供一个完全安全的文件上传脚本。这是我找到的那个:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
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"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
答案 0 :(得分:3)
你不能相信mime类型的$ _FILES [“file”] [“type”]。该信息由浏览器发送,因此可能是伪造的。最好使用mime_content_type或Fileinfo检查mime类型。
答案 1 :(得分:2)
要注意的一件事是MIME Type Detection in Internet Explorer,它可以将您的图片转换为security risk。
即使文件具有正确的扩展名,并且使用图像mime类型,如果文件本身包含<html>
,<body>
等标记,IE(7及更早版本)仍可能将其解释为HTML,开辟了可能的XSS漏洞。
答案 2 :(得分:0)
有病毒的文件仍然可以通过。
答案 3 :(得分:0)
对我好看。
答案 4 :(得分:0)
除非扫描文件,否则没有完全100%安全的文件上传方式。请记住,PHP是一种脚本语言,而不是安全程序语言。所以它和你做的一样安全。也就是说,除了限制大小和类型之外,您可以做的唯一其他事情是检查奇怪的文件名 - 奇怪的是您为应用程序定义的内容。
如果您可以使用第三方服务扫描您的文件(因为雅虎扫描感染病毒的附件),这会使应用程序变得更好,但我不知道任何问题。
答案 5 :(得分:0)
这可能是安全分析师的过度迂腐,但您应该使用正则表达式验证所有这些字段。而且内容也是如此。否则你就是不能确定。人们可以很容易地欺骗该代码接受一个文件作为'image / gif',然后在其中嵌入一个特定Apache处理程序可能选择将其视为有效命令的脚本! (可能不是默认情况下,但是当你将来安装'很酷的新Apache模块'时)。
如果你想要一个'完全'安全的脚本:验证一切,以确保一切都是你想要的,而不是更多或更少。