Request Forgery Protection

Posted by Anthony Chao on 2019-09-22

Request Forgery Protection

今天來到這篇的第 9 章,剛好之前聽到 Request Forgery 這個名詞覺得困惑,但沒有深入研究,今天來粗淺的探討一下

網路上有種攻擊方式叫做 CSRF (Cross Site Request Forgery),翻成中文的話是跨站請求偽造

這種攻擊方法的概念是讓使用者無意間做了某件事,通常是點了一個連結,或者按了一個按鈕,讓有心人士偽造出使用者本人發出的 request

這邊也來簡單舉個例吧

比方說今天有個惡意人士做了一個下載的連結 www.qoo.com/123456,裡面放的都是一些壞壞的東西

為了讓大家進去下載他們不想下載的東西,就做一個很吸引人的連結,像是恭喜你中大獎或者你是第 100 萬個用戶要送你哀鳳之類的,連結可能長這樣

1
<a href='www.qoo.com/123456' >請點這裡拿取你的哀鳳!</a>

一點擊,真的會下載這些惡意程式到電腦裡面因此就中招了

這只是個簡單的例子,當然真正要騙人的還會做得更精美,讓你完全不知道自己中招,接下來介紹 Rails 的防禦機制


Rails 的防禦機制

Rails 的防禦機制是加上 CSRF token,在你送出表單的時候,會隨機產生一組 token,要進入這個連結,Rails 會跟自己的 session 內容比對,確認這組 token 是不是由他產生的,如果不是就會擋掉,防止有心人士蓄意更改網站內容

如果有使用 form builder 的話,應該可以在那個頁面看到像是以下的程式碼:

1
2
3
<input type="hidden"
value="..."
name="authenticity_token"/>

上面這段就是提到的 CSRF token 囉!
其中的 value 看起來像是很長的一串亂數,這就是 Rails 生出來的,而且每次重新整理都會更新

如果想更了解 CSRF 可以參考這篇文章,裡面寫得非常詳細,還有提供更多的保護機制~

參考資料
Rails Guide

讓我們來談談 CSRF





prevent_hack