Improve TemplateImageLoader robustness
[MAILPOET-3923]
This commit is contained in:
@@ -29,6 +29,7 @@ class TemplateImageLoader {
|
|||||||
// Failed to load the image
|
// Failed to load the image
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
$mime = $this->wp->wpGetImageMime($image);
|
||||||
if (!$this->isTypeAllowed($image, $mime)) {
|
if (!$this->isTypeAllowed($image, $mime)) {
|
||||||
// Wrong file type
|
// Wrong file type
|
||||||
@unlink($image);
|
@unlink($image);
|
||||||
@@ -46,11 +47,11 @@ class TemplateImageLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function isUrlAllowed($url) {
|
private function isUrlAllowed($url) {
|
||||||
$urlParts = parse_url($url);
|
$urlParts = $this->wp->wpParseUrl($url);
|
||||||
$allowedExtensions = ['gif', 'png', 'jpg', 'jpeg'];
|
$allowedExtensions = ['gif', 'png', 'jpg', 'jpeg'];
|
||||||
if (
|
if (
|
||||||
!isset($urlParts['path'])
|
!isset($urlParts['path'])
|
||||||
|| !preg_match('/(' . join('|', $allowedExtensions) . ')$/', $urlParts['path'])
|
|| !preg_match('/\.(' . join('|', $allowedExtensions) . ')$/i', $urlParts['path'])
|
||||||
) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -59,10 +60,12 @@ class TemplateImageLoader {
|
|||||||
'https://ps.w.org/mailpoet/assets/newsletter-templates/',
|
'https://ps.w.org/mailpoet/assets/newsletter-templates/',
|
||||||
]);
|
]);
|
||||||
foreach ($allowedUrls as $allowedUrl) {
|
foreach ($allowedUrls as $allowedUrl) {
|
||||||
$allowedUrlParts = parse_url($allowedUrl);
|
$allowedUrlParts = $this->wp->wpParseUrl($allowedUrl);
|
||||||
if (
|
if (
|
||||||
isset($urlParts['host'], $allowedUrlParts['host'], $allowedUrlParts['path'])
|
isset($urlParts['host'], $urlParts['scheme'])
|
||||||
|
&& isset($allowedUrlParts['host'], $allowedUrlParts['scheme'], $allowedUrlParts['path'])
|
||||||
&& $urlParts['host'] === $allowedUrlParts['host']
|
&& $urlParts['host'] === $allowedUrlParts['host']
|
||||||
|
&& $urlParts['scheme'] === $allowedUrlParts['scheme']
|
||||||
&& strpos($urlParts['path'], $allowedUrlParts['path']) === 0
|
&& strpos($urlParts['path'], $allowedUrlParts['path']) === 0
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
@@ -71,13 +74,12 @@ class TemplateImageLoader {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isTypeAllowed($image, &$mime = null) {
|
private function isTypeAllowed($image, $mime) {
|
||||||
$allowedMimeTypes = [
|
$allowedMimeTypes = [
|
||||||
'image/gif',
|
'image/gif',
|
||||||
'image/jpeg',
|
'image/jpeg',
|
||||||
'image/png',
|
'image/png',
|
||||||
];
|
];
|
||||||
$mime = $this->wp->wpGetImageMime($image);
|
|
||||||
return $mime && in_array($mime, $allowedMimeTypes);
|
return $mime && in_array($mime, $allowedMimeTypes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user