1. PHP / Говнокод #20246

    0

    1. 1
    2. 2
    3. 3
    4. 4
    $fname=rand(0,10000)."_".$fname;
    while (is_file($upload_path.$fname)) {
        $fname=rand(0,10000)."_".$filename;
    }

    Если вдруг пользователь загрузил файл с одним и тем же именем, то надо ему приделать префикс. НО! Вдруг такой префикс уже был сгенерирован, ГПСЧ, тервер же! Сразу видно автор из ВУЗа.

    Запостил: carte, 22 Июня 2016

    Комментарии (4) RSS

    • У меня подобный код где-то был...

      Кстати, в первом случае точно надо $fname, а не $filename?
      $fname=rand(0,10000)."_".$fname;
      while (is_file($upload_path.$fname)) {
          $fname=rand(0,10000)."_".$filename;
      }
      Ответить
      • Да, точно. Вот более полный кусочек. Ничего фееричного, просто показать.
        if (!is_file($upload_path.$fname)) { //Файла нет, просто пишем
        	if (@copy($config["pathes"]["user_upload"].$filename,$upload_path.$fname)) {
        		//...
        		unlink($config["pathes"]["user_upload"].$filename);
        		//...
        	}
        } else { //Имя занято, поехали приколы
        	$fname=rand(0,10000)."_".$fname;
        	while (is_file($upload_path.$fname)) {
        		$fname=rand(0,10000)."_".$filename;
        	}
        	if (@copy($config["pathes"]["user_upload"].$filename,$upload_path.$fname)) {
        		//...
        		unlink($config["pathes"]["user_upload"].$filename);
        		//...
        	}
        }

        Scripto CMS
        Ответить
        • Алгоритм на естественном языке:
          - Если файла с таким именем нет, то пишем в него.
          - Если есть, то подбираем свободное имя и пишем в него.
          Ответить
    • rand(0,10000) - все равно можно загрузить не 10000 файлов с одинаковым названием

      while (is_file($upload_path.$fname)) {
          $fname=rand(0,10000)."_".$filename;
      }

      DoS прямо таки просится
      Ответить

    Добавить комментарий