提问人:JohnyFree 提问时间:6/4/2023 最后编辑:JohnyFree 更新时间:6/4/2023 访问量:110
PHP imagecreatefromstring 安全风险?
PHP imagecreatefromstring security risk?
问:
读完这篇博文后,我意识到 getimagesize() 并不能提供绝对的安全性,所以我决定根据这个答案使用 imagepng。但是,为了能够从通过 xmr 请求上传的图像中使用 imagepng,我需要首先使用这个:
$input = fopen("php://input","r");
$temp = tmpfile();
$target = fopen($path,"w")
fseek($tamp,0,SEEK_SET)
stream_copy_to_stream($temp,$target_file_name)
然后我就可以使用
$sourceImg = @imagecreatefromstring(@file_get_contents($source));
if ($sourceImg === false) {
throw new Exception("{$source}: Invalid image.");
}
$width = imagesx($sourceImg);
$height = imagesy($sourceImg);
$targetImg = imagecreatetruecolor($width, $height);
imagecopy($targetImg, $sourceImg, 0, 0, 0, 0, $width, $height);
imagedestroy($sourceImg);
imagepng($targetImg, $target);
imagedestroy($targetImg);
如果图像包含一些恶意代码,在这种情况下使用 fopen 和 stream_copy_to_stream 会带来任何风险吗?如果是这样,如果使用 xmr 上传图像,有没有更好的方法?
编辑:
正如@your常识所指出的那样,我可以简单地使用 .但是,现在的问题是,如果使用 imagecreatefromstring(file_get_contents(“php://input”));具有任何风险。imagecreatefromstring(file_get_contents("php://input"));
答:
0赞
O. Jones
6/4/2023
#1
imageCreateFromString() 是一种相当安全的清理上传图像文件的方法,只要您的 PHP 和 Web 服务器代码保持在最新的安全补丁级别即可。清理 === 检查是否有恶意或畸形内容。
在将图像存储在服务器文件系统上以供以后下载之前,请确保从图像文件的实际内容生成图像文件扩展名(.jpg、.png 等)。不要相信上传图像的人传递给您的文件扩展名。这样的事情会起作用。
$size = getimagesizefromstring( whatever );
$extension = image_type_to_extension( $size[2] );
还要清理传递给您的文件名。为了获得最佳的跨平台结果,它应该全部小写。并且它不应包含 、 或字符。DIRECTORY_SEPARATOR
/
.
评论