我不知道这是否会发生,但我会尝试一下.
过去一小时,我研究了图像上传安全性.我了解到有很多功能可以测试上传.
在我的项目中,我需要安全上传图片.也可能有相当大的数量,并且可能需要大量带宽,因此购买API不是一种选择.
所以我决定获得一个完整的PHP脚本,用于真正的安全图像上传.我也认为它对许多人有帮助,因为找不到真正安全的人是不可能的.但我不是在PHP专家,所以它真的头疼,我添加一些功能,所以我会问这个社会的帮助来创建真正安全的图片上传的一个完整的脚本.
关于它的真正伟大的主题在这里(但是,它们只是告诉我们需要做什么,但不是如何做到这一点,正如我所说我不是PHP的主人,所以我无法做到这一切由我自己): PHP图片上传安全检查清单 https://security.stackexchange.com/questions/32852/risks-of-a-php-image-upload-form
总之,他们告诉这是安全图像上传所需要的(我将从上面的页面引用):
- 使用.httaccess禁止PHP在上传文件夹中运行.
- 如果文件名包含字符串"php",则不允许上传.
- 仅允许扩展名:jpg,jpeg,gif和png.
- 仅允许图像文件类型.
- 禁止具有两种文件类型的图像.
- 更改图像名称.上传到子目录而不是根目录.
也:
- 使用GD(或Imagick)重新处理图像并保存处理后的图像.所有其他人都对黑客来说很有趣"
- 正如rr指出的那样,使用move_uploaded_file()进行任何上传"
- 顺便说一句,你想要对你的上传文件夹非常严格.那些地方是许多漏洞
发生的黑暗角落之一.这适用于任何类型的上载和任何编程
语言/服务器.检查
https://www.owasp.org/index.php/Unrestricted_File_Upload- 第1级:检查扩展名(扩展名文件以)结尾
- 第2级:检查MIME类型($ file_info = getimagesize($ _ FILES ['image_file']; $ file_mime = $ file_info ['mime'];)
- 级别3:读取前100个字节并检查它们是否具有以下范围内的任何字节:ASCII 0-8,12-31(十进制).
- 级别4:检查标题中的幻数(文件的前10-20个字节).你可以在这里找到一些文件头字节:http:
//en.wikipedia.org/wiki/Magic_number_%28programming%29#Examples- 您可能还想在$ _FILES ['my_files'] ['tmp_name']上运行"is_uploaded_file".请参见
http://php.net/manual/en/function.is-uploaded-file.php
这是它的重要组成部分,但仍然不是全部.(如果您知道更多可能有助于使上传更安全的内容,请分享.)
这就是我们现在所做的事情
主要PHP:
function uploadFile ($file_field = null, $check_image = false, $random_name = false) {
//Config Section
//Set file upload path
$path = 'uploads/'; //with trailing slash
//Set max file size in bytes
$max_size …Run Code Online (Sandbox Code Playgroud)当我尝试处理文件上传时,是否应该根据文件MIME类型或文件扩展名运行验证?
这两种文件验证方式的优缺点是什么?
而且,我应该关注任何其他安全问题吗?
在这些日子里,我依赖于MIME类型,但在这篇文章中回答最多的投票
永远不要依赖浏览器提交的MIME类型!
我听说,处理上载图像的最佳方法是使用GD 库“重新处理”它们并保存处理后的图像。请参阅:PHP图像上传安全性检查列表
我的问题是如何在此“重新处理” GD?这到底是什么意思?我不太了解GD库,恐怕会把它弄乱了...
因此,如果以前曾做过此事的人能给我一个例子吗?
(我知道,另一种选择是使用ImageMagick。对于ImageMagick,我在这里找到了答案:使用PHP从JPG删除EXIF数据,但现在不能使用ImgMagick。在这种情况下?)
(如果有兴趣,我正在使用Zend Framework。)
我创建了一个网站.在本网站上有能力上传图片.我读了一篇php文章,攻击者可以在GIF图像中间插入PHP代码然后在网站上传这个"邪恶"图像,然后该网站可能会打开安全漏洞可以任何朋友都可以提出一个想法来抵制这种类型的攻击..