可以为所有jQuery post调用添加参数吗?

时间:2013-09-30 18:20:19

标签: jquery ajax security csrf

我有一个应用程序,我通过要求服务器的所有请求都包含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令牌?可以这样做吗?关于从哪里开始的建议?

1 个答案:

答案 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