1. 程式人生 > >mvc 當中 [ValidateAntiForgeryToken] 的作用及用法

mvc 當中 [ValidateAntiForgeryToken] 的作用及用法

一.CSRF是什麼?

  CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

二.CSRF可以做什麼?

  你這可以這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義傳送惡意請求。CSRF能夠做的事情包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私洩露以及財產安全。

三.CSRF漏洞現狀

  CSRF這種攻擊方式在2000年已經被國外的安全人員提出,但在國內,直到06年才開始被關注,08年,國內外的多個大型社群和互動網站分別 爆出CSRF漏洞,如:NYTimes.com(紐約時報)、Metafilter(一個大型的BLOG網站),YouTube和百度HI......而 現在,網際網路上的許多站點仍對此毫無防備,以至於安全業界稱CSRF為“沉睡的巨人”。

四.CSRF的原理

 

 

 從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:

  1.登入受信任網站A,並在本地生成Cookie。

  2.在不登出A的情況下,訪問危險網站B。

  看到這裡,你也許會說:“如果我不滿足以上兩個條件中的一個,我就不會受到CSRF的攻擊”。是的,確實如此,但你不能保證以下情況不會發生:

  1.你不能保證你登入了一個網站後,不再開啟一個tab頁面並訪問另外的網站。

  2.你不能保證你關閉瀏覽器了後,你本地的Cookie立刻過期,你上次的會話已經結束。(事實上,關閉瀏覽器不能結束一個會話,但大多數人都會錯誤的認為關閉瀏覽器就等於退出登入/結束會話了......)

  3.上圖中所謂的攻擊網站,可能是一個存在其他漏洞的可信任的經常被人訪問的網站。

 

以上內容轉自:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

 

具體步驟:

1、在Html表單裡面使用了@Html.AntiForgeryToken()就可以阻止CSRF攻擊。

2、相應的我們要在Controller中也要加入[ValidateAntiForgeryToken]過濾特性。該特性表示檢測伺服器請求是否被篡改。注意:該特性只能用於post請求,get請求無效。

3、至於JS,我們的專案中引用的是<script src="@Url.Content("~/Content/js/jqueryToken-1.4.2.js")" type="text/javascript"></script>

在JS時要使用: $.ajaxAntiForgery才行,
如:
 $.ajaxAntiForgery({
            type: "post",
            data: { GroupName: $("#GroupName").val(), GroupPhones: $("#GroupPhones").val() },
            dataType: "json",
            url: "/Event/Mass/AddGroup",
            success: function (data) {
                if (data) {

                    alert("新增成功 ");
                    $.unblockUI();
                }
                else {
                    alert("新增失敗 ");
                }
         }
 })

注:對資料進行增刪改時要防止csrf攻擊!