jQueryuploadify在谷歌和火狐浏览器下无法上传

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: |||超大  

原因:

由于jQuery uploadify是借助Flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器。但Firefox、Chrome不会这样做,他们会认为这样不安全。哈,这就是原因。——摘自http://www.cnblogs.com/mbailing/archive/2011/03/30/uploadify.html

我是这样解决的,这样所有上传文件的代码都不需要修改,改动量最小,但是有安全隐患:

if(this.LoginInfo ==null)

{//解决uploadify兼容火狐谷歌浏览器上传问题//但是,此代码使系统有安全隐患,Flash程序请求该系统不需要验证//要解决此安全隐患,需要Flash程序传用户名和密码过来验证,但是该用户名和密码不能写在前端以便被不法用户看到if(Request.UserAgent =="Shockwave Flash")

{return;

}else{

filterContext.Result= RedirectToAction("LoginAgain","Account",new{ Area ="Auth"});return;

}

}

View Code

我们的系统是asp.netMVC的,虽说通过加密的方式可以让用户看不到敏感信息,但恶意用户不需要把敏感信息解密出来就可绕过系统验证。

验证信息不能直接写前台,可以用Ajax从后台获取验证信息,然后传给flash,然后在拦截器中验证。

修改后:

JS代码:

ajax请求后台获取用户名,传给flash

$(function() {

$.ajax({

url:"/Auth/Account/GetUserNamePwd",

type:"POST",

dataType:"json",

data: {},

success:function(data) {

$("#uploadify").uploadify({

height:25,

width:100,

swf:'/Content/Plugins/UploadifyJs/uploadify.swf',

uploader:'UploadFile',

formData: {

userName: data.data.userName,//ajax获取的用户名pwd: data.data.pwd//ajax获取的密码},

buttonText:'选择文件上传',

fileSizeLimit:'4MB',

fileTypeDesc:'文件',

fileTypeExts:'*.*',

queueID:'fileQueue',

multi:true,

onUploadSuccess:function(fileObj, data, response) {vard = eval("(" + data + ")");

$(".uploadify-queue-item").find(".data").html("  上传完成");

$("#url").val(d.url);

$("#name").val(d.name);

},

onUploadError:function(event, ID, fileObj, errorObj) {if(event.size > 4 * 1024 * 1024) {

alert('超过文件上传大小限制(4M)!');return;

}

alert('上传失败');

}

});//end uploadify}

});

});//end $

View Code

拦截器中代码:

......if(this.LoginInfo ==null)

{//解决uploadify兼容火狐谷歌浏览器上传问题//但是,此代码使系统有安全隐患,Flash程序请求该系统不需要验证//要解决此安全隐患,需要Flash程序传用户名和密码过来验证,但是该用户名和密码不能写在前端以便被不法用户看到if(Request.UserAgent =="Shockwave Flash")

{stringuserName = Request.Params["userName"];stringpwd = Request.Params["pwd"];if(!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(pwd))

{

AuthDAL authDAL=newAuthDAL();

sys_user user=authDAL.GetUserInfoByName(userName);if(user !=null&& user.passWord==pwd)

{return;

}

}

}else{

filterContext.Result= RedirectToAction("LoginAgain","Account",new{ Area ="Auth"});return;

}

}

......

View Code

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有