在表單裡加入隨機字串CSRF_TOKEN 來防止CSRF跨站攻擊是什麼原理?

來源:互聯網
上載者:User
關鍵字 laravel php web

是網上看到的一個跨站攻擊,php的架構laravel在表單裡加入了一個CSRF_TOKEN來防止跨站攻擊,想問這個隨機字串是在什麼時候發揮作用的呢?

回複內容:

是網上看到的一個跨站攻擊,php的架構laravel在表單裡加入了一個CSRF_TOKEN來防止跨站攻擊,想問這個隨機字串是在什麼時候發揮作用的呢?

csrf攻擊都是面對各種表單提交等會修改網站資料的事件,但對於每個使用者這個事件的url地址一般是固定的。使用者可以在你的網站內部訪問這個地址,那當其已登入的情況下,同樣可以通過網站外部成功訪問這個地址,如自己在地址欄輸入:某網站/轉賬?to="張三"&money="100",更特殊的,可以通過js指令碼隱式訪問這個url,暗中修改網站資料,那麼第三方網站可以訪問這個地址嗎?答案是可以的,就像你可以在自己網站跳轉百度,進入自己的百度首頁(有使用者資訊)。因此第三方網站可以利用你的cookie進行暗中操作,所以使用者與網站間需要某種“協議”來防止這種隨意的資料修改,表單驗證中帶上自有你訪問此網頁才能擷取的token,驗證通過,才能執行,此時,為了安全,你當然也不能通過地址欄輸入:某網站/轉賬?to="張三"&money="100"來轉賬了。

這種攻擊手法是這樣的:
1.使用者使用瀏覽器訪問SERVERA並以管理員身份登陸(此時使用者在SERVERA上是已經認證過的)
2.使用者訪問SERVERB的某個惡意頁面,這個頁面可能會通過AJAX或者IFRAME來訪問SERVERA的一個地址(類比使用者訪問A,但此時使用者並不知情)
3.SERVERA接受此次訪問並完成相應操作

防禦原理:
SERVERA採用CSRF_TOKEN時,每次提交的form都會包含一個TOKEN,伺服器SERVERA接收到後會驗證這個TOKEN
由於這個TOKEN是由SERVERA下發給使用者的,所以只有SERVERA和使用者知道,這樣可以確保在第3步的時候SERVERB構造的攻擊連結無法通過SERVERA的驗證。

擷取表單輸入之前,就要先驗證傳入的 csrf 欄位是否有效。
簡單來說,每次出現表單提交的時候,在表單中增加一個 隱藏的隨機的 csrf 欄位,隨同表單一起提交,服務端要先判斷提交的 csrf 欄位是否與伺服器上的 csrf 欄位一致,如果不一致就直接報錯。

我覺得這個是用來防止別的ajax訪問,還有就是其他這些軟體訪問;因為要想使用一個使用了CSRF_TOKEN的介面,你必需得找到獲得html中的CSRF_TOKEN隨機串。
以上是個人理解

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.