// First find out whether to fetch a file or accept an upload
if ($serendipity['POST']['imageurl'] != '' && $serendipity['POST']['imageurl'] != 'http://') {
if (!empty($serendipity['POST']['target_filename'])) {
- $tfile = trim($serendipity['POST']['target_filename']);
+ $tfile = serendipityNormalizeFilename($serendipity['POST']['target_filename']);
} else {
- $tfile = trim(basename($serendipity['POST']['imageurl']));
+ $tfile = serendipityNormalizeFilename(basename($serendipity['POST']['imageurl']));
}
if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN && preg_match('@\.(php[34]?|[ps]html?)$@i', $tfile)) {
break;
}
- $tfile = trim(serendipity_uploadSecure($tfile));
+ $tfile = serendipityNormalizeFilename(serendipity_uploadSecure($tfile));
$serendipity['POST']['target_directory'] = serendipity_uploadSecure($serendipity['POST']['target_directory'], true);
$target = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $serendipity['POST']['target_directory'] . $tfile;
}
} else {
if (!empty($serendipity['POST']['target_filename'])) {
- $tfile = trim($serendipity['POST']['target_filename']);
+ $tfile = serendipityNormalizeFilename($serendipity['POST']['target_filename']);
} else {
- $tfile = trim($_FILES['userfile']['name']);
+ $tfile = serendipityNormalizeFilename($_FILES['userfile']['name']);
}
if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN && preg_match('@\.(php[34]?|[ps]html?)$@i', $tfile)) {
break;
}
- $tfile = trim(serendipity_uploadSecure($tfile));
+ $tfile = serendipityNormalizeFilename(serendipity_uploadSecure($tfile));
$serendipity['POST']['target_directory'] = serendipity_uploadSecure($serendipity['POST']['target_directory'], true);
$target = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $serendipity['POST']['target_directory'] . $tfile;
# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
# All rights reserved. See LICENSE file for licensing details
+/**
+* Normalize a filename
+**/
+function serendipityNormalizeFilename($in) {
+ $out = preg_replace('![^a-zA-Z0-9\._/-]!', '', $in);
+ return $out;
+}
+
+
/**
* Get a list of images
**/