diff --git a/cis/private/lehre/upload.php b/cis/private/lehre/upload.php index e9eef884a..00b83c9cc 100644 --- a/cis/private/lehre/upload.php +++ b/cis/private/lehre/upload.php @@ -155,7 +155,7 @@ function checkvz(id) { vz = document.getElementById(id).value; - re = new RegExp(/^(\d|\w|\s|[-_])*$/); + re = new RegExp(/^(\d|\w|\s|[-_ÄÜÖäüö])*$/); if (vz.match(re)) { @@ -607,102 +607,52 @@ A:hover { { $file_name = $_FILES[$file]['name']; - if($file_name != "") - { - if(isset($subdir) && $subdir != "") + if(!check_filename($file_name)) + { + echo "
Dateiname von Datei ".($i+1)." ist ungültig! Der Dateiname darf nur Buchstaben und Zahlen enthalten.
"; + } + else + { + if($file_name != "") { - $uploadfile = $upload_root.'/'.$uploaddir.'/'.$subdir.'/'.$file_name; - } - else - { - $uploadfile = $upload_root.'/'.$uploaddir.'/'.$file_name; - } - - if(!file_exists($uploadfile)) - { - if(isset($subdir) && $subdir != "") { - if(!@is_dir($upload_root.'/'.$uploaddir.'/'.$subdir)) - { - unset($subdir); - } - else - { - if(!stristr($uploadfile, '.php') && !stristr($uploadfile, '.cgi') && !stristr($uploadfile, '.pl')) - { - if(copy($_FILES[$file]['tmp_name'], $uploadfile)) - { - exec('chmod 664 "'.$uploadfile.'"'); - if($islector) - { - exec('sudo chown :teacher "'.$uploadfile.'"'); - } - else - { - exec('sudo chown :student "'.$uploadfile.'"'); - } - } - } - else - { - $unallowed_upload = true; - } - } + $uploadfile = $upload_root.'/'.$uploaddir.'/'.$subdir.'/'.$file_name; } else { - if(!stristr($uploadfile, '.php') && !stristr($uploadfile, '.cgi') && !stristr($uploadfile, '.pl')) - { - if(copy($_FILES[$file]['tmp_name'], $uploadfile)) - { - exec('chmod 664 "'.$uploadfile.'"'); - if($islector) - { - exec('sudo chown :teacher "'.$uploadfile.'"'); - } - else - { - exec('sudo chown :student "'.$uploadfile.'"'); - } - } - } - else - { - $unallowed_upload = true; - } + $uploadfile = $upload_root.'/'.$uploaddir.'/'.$file_name; } - } - else - { - if(isset($overwrite)) + + if(!file_exists($uploadfile)) { - if(isset($subdir) && $subdir != "") - { - if(!@is_dir($upload_root.'/'.$uploaddir.'/'.$subdir)) + + if(isset($subdir) && $subdir != "") + { + if(!@is_dir($upload_root.'/'.$uploaddir.'/'.$subdir)) { - unset($subdir); + unset($subdir); } else { - if(!stristr($uploadfile, '.php') && !stristr($uploadfile, '.cgi') && !stristr($uploadfile, '.pl')) + if(!stristr($uploadfile, '.php') && !stristr($uploadfile, '.cgi') && !stristr($uploadfile, '.pl')) { - if(copy($_FILES[$file]['tmp_name'], $uploadfile)) - { - exec('chmod 664 "'.$uploadfile.'"'); - if($islector) - { - exec('sudo chown :teacher "'.$uploadfile.'"'); - } - else - { - exec('sudo chown :student "'.$uploadfile.'"'); - } - } + if(copy($_FILES[$file]['tmp_name'], $uploadfile)) + { + exec('chmod 664 "'.$uploadfile.'"'); + if($islector) + { + exec('sudo chown :teacher "'.$uploadfile.'"'); + } + else + { + exec('sudo chown :student "'.$uploadfile.'"'); + } + } } else { - $unallowed_upload = true; + $unallowed_upload = true; } } } @@ -725,15 +675,72 @@ A:hover { } else { - $unallowed_upload = true; + $unallowed_upload = true; } } - $no_overwrite_error=false; } else - $no_overwrite_error=true; + { + if(isset($overwrite)) + { + if(isset($subdir) && $subdir != "") + { + if(!@is_dir($upload_root.'/'.$uploaddir.'/'.$subdir)) + { + unset($subdir); + } + else + { + if(!stristr($uploadfile, '.php') && !stristr($uploadfile, '.cgi') && !stristr($uploadfile, '.pl')) + { + if(copy($_FILES[$file]['tmp_name'], $uploadfile)) + { + exec('chmod 664 "'.$uploadfile.'"'); + if($islector) + { + exec('sudo chown :teacher "'.$uploadfile.'"'); + } + else + { + exec('sudo chown :student "'.$uploadfile.'"'); + } + } + } + else + { + $unallowed_upload = true; + } + } + } + else + { + if(!stristr($uploadfile, '.php') && !stristr($uploadfile, '.cgi') && !stristr($uploadfile, '.pl')) + { + if(copy($_FILES[$file]['tmp_name'], $uploadfile)) + { + exec('chmod 664 "'.$uploadfile.'"'); + if($islector) + { + exec('sudo chown :teacher "'.$uploadfile.'"'); + } + else + { + exec('sudo chown :student "'.$uploadfile.'"'); + } + } + } + else + { + $unallowed_upload = true; + } + } + $no_overwrite_error=false; + } + else + $no_overwrite_error=true; + } } - } + } } } } @@ -820,7 +827,7 @@ A:hover { { if(isset($new_dir_name_text) && $new_dir_name_text != "") { - if(!preg_match('/^(\d|\w|\s|[-_])*$/',$new_dir_name_text)) + if(!check_filename($new_dir_name_text)) { echo '
Verzeichnisname ist ungueltig!
'; } diff --git a/include/functions.inc.php b/include/functions.inc.php index c275360bb..253234ff5 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -761,4 +761,20 @@ function mb_str_replace( $needle, $replacement, $haystack ) } return $haystack; } + +/** + * + * Prueft ob es sich um einen gueltigen Filenamen handelt + * Filenamen mit HTML-Tags oder sonstigem Schadcode sind nicht gueltig + * + * @param string $filename + * @return boolean true wenn gueltig, sonst false + */ +function check_filename($filename) +{ + if(!preg_match('/^(\d|\w|\s|[-_.,ÄÜÖäüö!?])*$/',$filename)) + return false; + else + return true; +} ?>