diff options
author | Marc Alexander <admin@m-a-styles.de> | 2013-10-24 21:03:06 +0200 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2013-10-24 23:43:40 +0200 |
commit | 9b0b5481fe05b10a254861495280d04721e8d9d1 (patch) | |
tree | 7341ab0d393b06d0f7a961eb207bd46a28859478 /phpBB | |
parent | 2adf3d7a3473fe8d01e850329bd935e97f09668d (diff) | |
download | forums-9b0b5481fe05b10a254861495280d04721e8d9d1.tar forums-9b0b5481fe05b10a254861495280d04721e8d9d1.tar.gz forums-9b0b5481fe05b10a254861495280d04721e8d9d1.tar.bz2 forums-9b0b5481fe05b10a254861495280d04721e8d9d1.tar.xz forums-9b0b5481fe05b10a254861495280d04721e8d9d1.zip |
[ticket/11534] Check remote avatar content type if possible
This should make sure that error pages like 404 or 503 pages are not treated
as remote avatar images.
PHPBB3-11534
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/phpbb/avatar/driver/remote.php | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/phpBB/phpbb/avatar/driver/remote.php b/phpBB/phpbb/avatar/driver/remote.php index 1aa638dfe5..a04c6879f3 100644 --- a/phpBB/phpbb/avatar/driver/remote.php +++ b/phpBB/phpbb/avatar/driver/remote.php @@ -125,6 +125,37 @@ class remote extends \phpbb\avatar\driver\driver $types = \fileupload::image_types(); $extension = strtolower(\filespec::get_extension($url)); + // Check if this is actually an image + if ($file_stream = @fopen($url, 'r')) + { + // Timeout after 1 second + stream_set_timeout($file_stream, 1); + $meta = stream_get_meta_data($file_stream); + foreach ($meta['wrapper_data'] as $header) + { + $header = preg_split('/ /', $header, 2); + if (strtr(strtolower(trim($header[0], ':')), '_', '-') === 'content-type') + { + if (strpos($header[1], 'image/') !== 0) + { + $error[] = 'AVATAR_URL_INVALID'; + fclose($file_stream); + return false; + } + else + { + fclose($file_stream); + break; + } + } + } + } + else + { + $error[] = 'AVATAR_URL_INVALID'; + return false; + } + if (!empty($image_data) && (!isset($types[$image_data[2]]) || !in_array($extension, $types[$image_data[2]]))) { if (!isset($types[$image_data[2]])) |