当前位置:  开发笔记 > 编程语言 > 正文

PHP上传文件增强了安全性

如何解决《PHP上传文件增强了安全性》经验,为你挑选了2个好方法。

嘿..我的问题是如何防止有人上传病毒或某些恶意代码与您假装的扩展程序,例如我有一个pdf文件上传器,任何人都可以上传带有pdf伪装的二进制文件,有很多程序可以做到这一点.



1> rook..:

上传文件时会出现一些安全问题.第一个问题是文件可能不是您想要的文件,在本例中是pdf.该变量$_FILES['file_name']['type']由攻击者控制,永远不可信任.通常使用漏洞利用代码或使用篡改数据修改此值.

1)您的secuirty系统的第一步是确保该文件具有.pdf扩展名:

if("pdf"!=substr($fileName, strrpos($fileName, '.') + 1)){
   die("Invalid File Type");
}

2)接下来你应该使用php filetype()函数检查它是什么文件类型.

3)一个严重的问题是这些PDF文件可以利用Adobe制作的软件中常见的缓冲区溢出等漏洞.这些PDF用于在Drive By Download攻击中传播病毒.

最佳解决方案是安装Web应用程序防火墙Mod_Security.这将阻止sql注入和xss等攻击攻击您的Web应用程序.可以将Mod_Secuirty配置为使用modsec-clamscan扫描所有上载文件中的病毒.


filetype()如何帮助?在我看来,它所做的就是告诉你文件是否是文件与目录.也许你的意思是[finfo-file()](http://www.php.net/manual/en/function.finfo-file.php)?

2> Gabriel Sosa..:

我们使用fileinfo+文件扩展名检查的组合.虽然浏览器通常发送mime类型,但你永远不应该相信它,因为它可能被劫持.

在我们的例子中,我们不在服务器中运行任何文件.所以我们所做的就是拥有一个extension while list像(例如):pdf jpg pngetc ..和一个列表blacklisted mime extensions.这样我们就可以避免出现扩展名与mime类型不匹配的文件的风险.

一旦文件保存在服务器中,我们总是强制使用mime类型,application/octet-stream因此总是下载文件.

这样的事情:

file($file_name_tmp);
}
else {
    $mime = $file_type;
}

$mime = explode(" ", $mime);
$mime = $mime[0];

if (substr($mime, -1, 1) == ";") {
    $mime = trim(substr($mime, 0, -1));
}

return (in_array($mime, $mime_type_black_list) == false);

除此之外你可以添加virus scan使用clamav+ 扩展名

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有