2013-05-04 110 views
1

我最近受到一個簡單的CSRF攻擊,並意識到我的許多ajax腳本是開放的。這些可以在我的網站上用$ .post()訪問。

有沒有辦法自動添加一個PHP令牌給所有這些,或者我需要通過並一一做這件事?

回答

3

使用bwoebi的答案,我發現了一個稍微好一點的解決方案。 jQuery有一個內置的ajax設置功能。

<script>var token ="<?= $_SESSION['token'] ?>";</script> 
<script> 
jQuery.ajaxSetup({ 
    data: { 
     token: token 
    } 
}); 
</script> 

這會將您的令牌添加到每個jQuery請求!

+0

+1比我的更好:-) – bwoebi 2013-05-04 21:37:11

1

一個想法是,以取代$.post功能:

jQuery["post"] = function (url, data, callback, type) { 
    data["token"] = token; // where token is a global variable 
    // you write in a <script> 'var token = <?php echo $_SESSION["token"]; ?>;' 
    return jQuery.ajax({ // copied from the jQuery code 
     url: url, 
     type: "POST", 
     dataType: type, 
     data: data, 
     success: callback 
    }); 
}; 

所以你只需要包括JQ-LIB後添加這個小碼。

+0

不錯!我可以將它附加到我的jQuery庫中,還是應該創建一個新文件? – hellohellosharp 2013-05-04 20:41:16

+0

我會將它寫入一個新文件中,以便它在lib的更新中不會丟失。 – bwoebi 2013-05-04 20:42:48

+0

好吧,剛剛發現我的一些代碼使用了傳統的'.ajax({type:「POST」,'code。有沒有辦法重寫這個呢? – hellohellosharp 2013-05-04 21:05:57