源碼掃描 – Cross-Site Request Forgery 跨站請求偽造

前言

距離上次的源碼掃描文章過了快一年,今年的專案也開始做掃描了,不同的是這一次的專案不是 Java了,而是C#。

所以最近會開始整理遇到的掃描問題,可能會新增文章或是修正以前寫的文章~

Cross-Site Request Forgery 跨站請求偽造

簡寫為 CSRF,最簡單來說就是欺騙使用者執行某些非本意的動作。

攻擊者會通過欺騙用戶的瀏覽器,利用其已經認證過的會話,向受信任的網站發送偽造請求。 故網站會認為是使用者本人所執行的操作,但其實不然。

常見的解決方法有

  • 權杖同步模式(Synchronizer token pattern,簡稱STP),也就是CSRF Token,由伺服器生成一個唯一的隨機值到頁面上,要求使用者傳回來驗證
  • 檢查Referer欄位 : 檢查請求的來源地址是否來自受信任的頁面,但Request是可以偽造的…

該怎麼修正 – C# 篇

被掃出來的範例大概如下,可以看出來是個設定儲存的地方

<form action="Setting/Save" method="post">
...
</form>

而假設如果沒有任何驗證,那可能帶入的參數就會被儲存起來了…

*這邊用的是 .NET core, FrameWork的話不確定能否通用

<form action="Setting/Save" method="post">
@Html.AntiForgeryToken()
...
</form>

這樣就會在前面產生一個 token了,實際跑起來大概像這樣

<form action="Setting/Save" method="post">
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8Bf3mJHVV.....s">
...
</form>

可以看到自動產生了一個 token,每次對話都會不一樣

這時候我們還要來到Controller的地方,幫它加上 [ValidateAntiForgeryToken]

public class SettingController
{       
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Save(Setting model)

這樣在呼叫Setting/Save 的時候,就會需要驗證 token了

但要注意的是,在所有呼叫這支程式的地方都要加上對應的 @Html.AntiForgeryToken(),不然他可是會阻擋你的訪問的


結論

好久沒寫文章,還好還有基本盤的人數撐著~ 不過,反正本來就是寫興趣的,那還是別在意了。

另外,最近寫個一支檢查繁/簡體的程式,雖然也是基於套件上的,但有機會還想跟大家分享呢

參考文章 :

🧡希望文章能幫您上一點小忙!

🧡幫我分享給朋友或是在底下留下您寶貴的意見,都是對我的支持

✅如有任何疑問,歡迎透過留言或messenger讓我知道 !

掃描的文章們

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *