aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2013-10-24 21:03:06 +0200
committerMarc Alexander <admin@m-a-styles.de>2013-10-24 23:43:40 +0200
commit9b0b5481fe05b10a254861495280d04721e8d9d1 (patch)
tree7341ab0d393b06d0f7a961eb207bd46a28859478 /phpBB
parent2adf3d7a3473fe8d01e850329bd935e97f09668d (diff)
downloadforums-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.php31
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]]))