Pull to refresh

Yii 1.1.8 — загрузка файлов с произвольным расширением с помощью CMultiFileUpload

Reading time 1 min
Views 4.1K
Доброго всем времени суток!

Недавно делая сайт на Yii обнаружили такую вот дыру в загрузке файлов на сервер с помощью CMultiFileUpload (за что отдельное спасибо Mx21): есть возможность взять файл с произвольным расширением, дописать в конец имени что-то вроде .jpg и потом залить на сервер виджетом CMultiFileUpload. Даже не смотря на то, что свойство 'accept' имеет, к примеру, значения 'jpeg|jpg|gif|png', т.е. не должно аплоадить ничего кроме такого рода картинок, происходило следующее: файл без проблем закачивался на сервер, причем .jpg в конечном файле обрезалось и на сервере оказывался исходный файл с тем расширением какое оно было до того как мы его переименовали.
Используемая нами версия фреймворка 1.1.8.

Лечится следующим образом:
В файле /framework/web/js/jquery.multifile.js нужно исправить строки 222-223:
          if(MultiFile.accept && v && !v.match(MultiFile.rxAccept))//{
            ERROR = MultiFile.STRING.denied.replace('$ext', String(v.match(/\.\w{1,4}$/gi)));

вернее заменить их на следующий код:
			var str=this.value;
			var pattern='\.';
			var pos = str.indexOf(pattern);
			for (var count = 0; pos != -1; count++)
				pos = str.indexOf(pattern, pos + pattern.length);
          
          
          if((MultiFile.accept && v && !v.match(MultiFile.rxAccept)) || count>1)//{
            ERROR = MultiFile.STRING.denied.replace('$ext', String(v.match(/\.\w{1,4}$/gi)));


Т.е. добавили проверку на количество точек в имени загружаемого файла, если более одной точки получаем сообщение об ошибке «Invalid file type».
Tags:
Hubs:
+1
Comments 31
Comments Comments 31

Articles