我有一个应用程序,我通过要求服务器的所有请求都包含CSRF令牌来实现CSRF保护。我的应用程序中有很多地方使用jQuery post函数,如下所示:
$.post("/ajax/whatever", {data: "my data"}, function(data){
//whatever
});
除非我包含如下所示的CSRF令牌,否则上述请求将无效:
$.post("/ajax/whatever", {data: "my data", _csrf: "my_csrf_token"}, function(data){
//whatever
});
不幸的是,这要求我修改使用post
函数的每一段代码。
我想知道的是,是否有任何方法可以拦截对post
函数的所有调用并更新传递的数据以包含缺少的CSRF令牌?可以这样做吗?关于从哪里开始的建议?
答案 0 :(得分:0)
覆盖JQuery函数非常容易; - )
var CSRF ="123456789";
(function(jQuery){
var oPost = jQuery.post;
jQuery.post = function( ) {
if (!jQuery.isFunction( arguments[1] )) {
arguments[1]['_csrf'] = CSRF;
}
return oPost.apply($, Array.prototype.slice.apply(arguments));
};
})(jQuery)
查看this