方案一:每個請求都帶上一個由服務器生成的隨機參數。然后在服務器端和對該參數,如果和下發的隨機數不同,則可以認為有人在偽造請求。因為攻擊者無法知道他本次攻擊的http請求需要帶什么樣的隨機數才是有效的。
方案二:跨域偽造之所以能成功,主要決定因素是攻擊者的頁面和稍候被打開的目標頁面共享session信息。受害者登錄后,攻擊者的頁面通過ajax向被攻擊網站的關鍵業務發起的請求便自動帶上了合法的session信息。但是,根據javascript的同源策略可知,掛有A域名的窗口,不能獲取掛有B域名窗口中的任何信息,不管B是如何被打開的。據此,我們可以在客戶端的每個要保護的業務鏈接上增加一個參數sessionId,這個參數可以通過js從cookie中獲得。然后,在服務器端獲取此參數,並同真正的sessionId做對比,如果不同,則認為請求是偽造的。因為攻擊者的窗口無法從被攻擊網站的窗口中取得這個sessionId。方案二的實現: 定義一個過濾器, 對頁面傳遞過來的sessionid和實際sessionid進行比較, 相同則通過
定義過濾器,請求時增加sessionid參數