tp5防止黑客入侵(非常重要)以及对base64的处理

当上传的图片时我们首先要验证图片的类型,如果时base64时就用下面这个进行判断,
function is_base64_encoded($data)
{
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $data, $matches)) {
        return TRUE;
    } else {
        return FALSE;
    }
}

当上传的图片为其他的时候,判断是否为png,jpg等图片下面判断如下

/**
 * 上传图片
 * @param Request $request
 * @return \think\response\Json
 */
public function uploadImage(Request $request)
{
    $folder=$request->param('folder');//指定文件夹
    $file=$request->file('file');
    if(!$file) return json(['code'=>400,'msg'=>'请选择文件']);
    if($folder){
        $upload=$file->rule('month')->validate(array('ext'=>'jpg,png,jpeg,bmp,gif'))->move(UPLOAD_PATH.$folder);
    }else{
        $upload=$file->validate(array('ext'=>'jpg,png,jpeg,bmp,gif'))->move(UPLOAD_PATH);
    }
    if($upload){
        $saveName=$upload->getSaveName();
        $img=($folder ? ($folder.DS) : '').$saveName;

        return json(['code'=>200,'data'=>$img]);
    }else{
        return json(['code'=>400,'msg'=>$upload->getError()]);
    }
}

validate验证上传图片的类型

 

下面顺便讲一下对base64的处理

上传的base64处理

/*
     * 生成图片
     * */
function image($image)
{
    $imageName = "20188_" . date("His", time()) . "_" . rand(1111, 9999) . '.png';
    if (strstr($image, ",")) {
        $image = explode(',', $image);
        $image = $image[1];
    }
    $path = "./" . 'uploads/Ver/' . date("Ymd", time());
    if (!is_dir($path)) { //判断目录是否存在 不存在就创建
        mkdir($path, 0777, true);
    }
    $imageSrc = $path . "/" . $imageName; //图片名字
    $r = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
    if (!$r) {
        return 1;
    } else {
        return $imageSrc;
    }
}

 

还有一种情况:当提交后可以编辑时,base64就会出问题

1.第一次上传base64我将图片处理后保存到数据库,当第二次时,我会将数据库中的连接返回给前端(此时是链接)

这样就会出现问题,因为再次提交没有改变的图片其实是url链接,发送给我就会再次处理(对base64的处理),此时出错

解决方案:

每次点击上传图片就去请求处理base64的方法,然后我返回的都是url,再次编辑也是一样的,就不会出现以上问题。tp5防止黑客入侵(非常重要)以及对base64的处理_第1张图片

你可能感兴趣的:(经验)