1

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

4

1 回答 1

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)

看看这个

于 2013-09-30T18:52:33.557 回答