Доброго всем времени суток!
Недавно делая сайт на 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».