2013-09-30 41 views
1

我有一個應用程序,我通過要求服務器的所有請求包含一個CSRF令牌來實現CSRF保護。我在我的應用程序很多地方使用jQuery的崗位職能象下面這樣:是否可以爲所有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

有一個全球性的ajaxSend處理程序,但我不知道這是否讓你修改AJAX選項。 –

+0

另請參閱此[發佈](http://stackoverflow.com/questions/11930295/jquery-override-post-function) – pknoe3lh

回答

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

+0

Hrrm是可能有一個覆蓋,只是更新數據並調用原始發佈功能? –

+0

更新!這並不容易,因爲Post不是一個Jquery.fn函數...... – pknoe3lh

相關問題