Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ZipArchive类PHP安全问题_Php_Linux_Security - Fatal编程技术网

ZipArchive类PHP安全问题

ZipArchive类PHP安全问题,php,linux,security,Php,Linux,Security,我有以下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

我有以下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();
//检查是否设置了上载
如果
(
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=真;
$UploadIsBad=false;
$UploadExtension=pathinfo($\u文件['file']['name'],pathinfo\u扩展名);
//检查上传是否正常
需要“./xdata/php/website\u config/website.php”;
$RandomFoo=兰特(10009999999999);
如果($_文件[“文件”][“大小”]<($MaxAvatarPictureSize*1000000)))
{
如果($\u文件[“文件”][“错误”]>0)
{
$UploadIsBad=true;
$hrefs->item(0)->setAttribute(“错误”、“真”);
$hrefs->item(0)->setAttribute(“somethingError”、“true”);
}
其他的
{
移动上传的文件($\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
}
}
其他的
{
//文件太大了
$UploadIsBad=true;
$hrefs->item(0)->setAttribute(“错误”、“真”);
$hrefs->item(0)->setAttribute(“UploadTooBig”、“true”);
}
}
其他的
{
$UploadIsSetted=错误;
}
$ZipFile=新ZipParchive;
$ZipFile->open('../upload/tmp/'.$LastFilename'.zip',ZIPARCHIVE::CREATE);
$ZipFile->addFile('../upload/tmp/'.$RandomFoo..file',$RandomFoo.'.$UploadExtension);
$ZipFile->close();
现在我最担心的是用户可以上传任何东西,因此我如何防止:

  • 上载2GB 3GB文件
  • 鞭打
  • 上传某种扭曲的漏洞,最终会改变我的服务器安全性
  • 缓冲区溢出
  • 具有任意代码注入的文件名
我是说,这个脚本有多安全

我现在正在运行windows,如果($_FILES[“file”][“size”]<($MaxAvatarPictureSize*1000000))已经将文件大小限制为
$MaxAvatarPictureSize
兆字节,我将切换到linux。虽然
$MaxAvatarPictureSize
似乎未在您提供的代码中设置。我猜最多应该是1或2。 还没有设置的是
$LastFilename
,可能还有其他一些


在压缩部分周围放置
if($UploadIsBad==false){/*do zipping*/}
,以避免压缩过大或无效的文件。

您还有四个问题:

鞭打

这是最复杂的部分。让我用谷歌搜索你一些想法:

  • -使用nonce,time+将其绑定到会话上
  • 如果验证码对可用性没有太大影响,就使用验证码
上传某种扭曲的漏洞,最终会改变我的服务器 保安

使用命令行病毒扫描程序(
f-prot
clamav
)扫描上载的文件。您可以在PHP本身中使用一个简单的正则表达式扫描器(例如,探测图像文件中的HTML内容),但这不是一个实际的安全特性;不要重新发明轮子

缓冲区溢出

PHP通常不易受到缓冲区溢出的影响

好吧,开玩笑。但你不能在userland对此做任何事。但推动关系并不是什么大问题。这在脚本语言中是非常可靠和不可利用的,只要您知道如何在哪个上下文中逃避什么

具有任意代码注入的文件名


最起码,您应该始终使用它来避免路径遍历攻击。如果要保留用户指定的文件名,则需要一个regex白名单<代码>=preg_replace('/[^\w\s.]/',''$fn)作为一个粗略的例子。

一次有太多的子问题。问最重要的问题。还有,想想吧,不能把$file [文件] [大小]假的吗?注入一些代码?我不知道,我不是sec专家,但我应该成为,我正在开发一个软件…他可能会使用PHP来避免处理臃肿的请求。(虽然带有非用户友好的消息)额外的检查是调用
filesize($\u FILES[“file”][“tmp\u name”])
来检查实际大小,而不是像@RowMinds所说的那样依赖
$\u FILES[“file”][“size”]
。非常感谢,非常有用:)很高兴阅读所有这些内容