[英]ZipArchive class PHP security issue
我有以下PHP代码
// Check if the upload is setted
if
(
isset($_FILES['file']['name']) && !empty($_FILES['file']['name']) &&
isset($_FILES['file']['type']) && !empty($_FILES['file']['type']) &&
isset($_FILES['file']['size']) && !empty($_FILES['file']['size'])
)
{
$UploadIsSetted = true;
$UploadIsBad = false;
$UploadExtension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
// Check if the upload is good
require "../xdata/php/website_config/website.php";
$RandomFoo = rand(1000999999,9999999999);
if (($_FILES["file"]["size"] < ($MaxAvatarPictureSize*1000000)))
{
if ($_FILES["file"]["error"] > 0)
{
$UploadIsBad = true;
$hrefs->item(0)->setAttribute("Error","true");
$hrefs->item(0)->setAttribute("SomethingWrong","true");
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],"../upload/tmp/".$RandomFoo.".file");
}
}
else
{
// The file is too big
$UploadIsBad = true;
$hrefs->item(0)->setAttribute("Error","true");
$hrefs->item(0)->setAttribute("UploadTooBig","true");
}
}
else
{
$UploadIsSetted = false;
}
$ZipFile = new ZipArchive;
$ZipFile->open('../upload/tmp/'.$LastFilename.'.zip',ZIPARCHIVE::CREATE);
$ZipFile->addFile('../upload/tmp/'.$RandomFoo.'.file',$RandomFoo.".".$UploadExtension);
$ZipFile->close();
现在我最关心的是用户可以上传任何东西,所以我该如何防止:
我的意思是,此脚本的安全性如何?
我现在正在运行Windows,我将切换到linux
您的其他四个问题:
加载
那是复杂的部分。 让我用谷歌搜索一些想法:
上传某种扭曲的漏洞,最终会改变我的服务器安全性
使用命令行病毒扫描程序( f-prot
或clamav
)扫描上载的文件。 您可能在PHP本身中使用了一个幼稚的正则表达式扫描仪(例如,对图像文件中的HTMLish内容进行了探测),但这并不是事实安全功能; 不要重新发明轮子。
缓冲区溢出
通常,PHP不容易受到缓冲区溢出的影响。
好吧开玩笑 但是您不能在用户领域做任何事情。 但是向周围推弦并不是什么大问题。 只要您知道如何在哪种情况下转义,这在脚本语言中是相当可靠且无法解释的。
具有任意代码注入的文件名
千篇一律的是,您最应该始终使用basename()
来避免路径遍历漏洞。 如果要保留用户指定的文件名,则按顺序排列正则表达式白名单。 =preg_replace('/[^\\w\\s.]/', '', $fn)
作为粗略示例。
if (($_FILES["file"]["size"] < ($MaxAvatarPictureSize*1000000)))
已经将可接受的文件大小限制为$MaxAvatarPictureSize
兆字节。 虽然$MaxAvatarPictureSize
似乎没有在您提供的代码中设置。 我的猜测应该是1或2个最大值。 同样没有设置的是$LastFilename
,可能还有其他一些。
另外,在压缩部分周围放置一个if($UploadIsBad === false) { /* do zipping */ }
以避免压缩太大或无效的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.