繁体   English   中英

“图像”规则是否足够安全?

[英]Is 'image' rule secure enough?

因此,我试图为我的网站创建一个上传个人资料图片,而且我想知道image规则在Laravel中是否足够安全。

考虑以下代码:

input = [
    'profile_picture' => Input::file('profile_picture'),
];

$rules = ['profile_picture' => 'required|image'];

$validator = Validator::make($input, $rules);

if ($validator->fails()) {
    return 'It\'s not an image!';
} 

非常简单,我要让您关注的是rules数组中的image规则。

Laravel似乎通过其MIME类型来验证图像。 众所周知,可以从客户端进行编辑,然后使用篡改数据或Burp代理之类的内容将其发送到服务器。

您说如何知道它通过其MIME类型验证图像? 好吧...看下面的这段代码,这是Laravel用于验证的Validator.php类。 它包含了我认为的每条规则。 具体来说,这是validateImage函数,这是image规则。

验证器/ validateImage():

/**
* Validate the MIME type of a file is an image MIME type.
*
* @param  string  $attribute
* @param  mixed   $value
* @return bool
*/
protected function validateImage($attribute, $value)
{
    return $this->validateMimes($attribute, $value, array('jpeg', 'png', 'gif', 'bmp'));
}

就像Doc-block所说的那样,它通过其MIME类型对其进行验证。

这样足够安全吗? 任何问题都欢迎!

不,这是不安全的。 至少您不能确定它是否是真实图像,因为可以操纵MIME类型。 通常有帮助的是使用getimagesize() ,如果文件不是图像,它将返回false 因此,您可以使用以下规则扩展验证器:

Validator::extend('real_image', function($attribute, $value, $parameters){
    if($value instanceof Symfony\Component\HttpFoundation\File\UploadedFile){
        if(getimagesize($value->getRealPath() !== false){
            return true;
        }
    }
    return false;
}

并将其添加到您的验证规则:

$rules = ['profile_picture' => 'required|image|real_image'];

回答您的问题我们不能说有把握的事情。

但是是, Laravel仅验证您指定的几种格式的图像 这里也提到

如果您认为这是基本验证,则应使用像这样的第三方程序包, 程序包通过长宽比验证图像(只有真实的图像可以使用)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM