2015-05-31 21 views
0

我已經開發了一個相當大的項目,我想通過在Session變量中保存一個令牌並在每個表單中發送該令牌以檢查它是否正確防止CSRF攻擊。CSRF令牌簡單的方法來添加到PHP中的表格

事情是,該項目有很多形式,它可能是痛苦的,需要花費大量的時間來通過每個窗體,以添加令牌隱藏輸入。

所以我問自己,是否有任何簡單的方法可以將隱藏值添加到每個表單中,而無需通過每個表單? 也許使用jQuery,我可以本地化頁面內的每個表單來添加一個隱藏的輸入,然後添加一個通用的$ _POST/$ _ GET函數來檢查任何請求,如果令牌是正確的。

這是一個想法,但可能有可能是另一種簡單和更好的方法。 有沒有簡單,快速和體面的方式來做到這一點? 在這種情況下,最好的方法是什麼(在開發項目後準備CSRF攻擊預防)。 據我所知,阻止CSR攻擊的最佳方法是使用令牌變量,是否有另一種體面的方式可以做到這一點,而無需使用令牌並遍歷每個表單?

回答

0

請看這裏:Automatically insert CSRF token in all forms with JQuery

你可以在<script>標籤添加一些代碼的功能,內嵌的證明:

jQuery(document).ready(function() { 
    jQuery("form").each(function() { 
    var tokenElement = jQuery(document.createElement('input')); 
    tokenElement.attr('type', 'hidden'); 
    tokenElement.attr('name', 'token'); 
    tokenElement.val(<?= $token ?>); 
    jQuery(this).append(tokenElement); 
    }); 
}); 

這將自動添加服務器端$token要包括爲每個<form>元素一個隱藏的表單字段。

如果你想實現這一點沒有任何服務器端的處理,與上述所有代碼可以包含在.js文件的好處是,你可以store the token in a cookie和簡單的訪問(使用COOKIE plugin)這個值客戶端:

tokenElement.val($.cookie("csrftoken"));