2023年6月20日 星期二

[小心防範] 測試Form 如何傳遞JSON格式文本

前些日子看了一下黑哥的文章:ASP.NET MVC 防止 AJAX POST CSRF 攻擊,好奇表單Form 要如何

傳送 Json 格式?不能全然相信這類設計



通常 CSRF/XSRF 或稱 one click attack 都是透過使用者對於瀏覽器的信任達成攻擊,惡意網站設計

類無害頁面,讓使用者在「不知情」的情況下,送出資料到合法網站,實際操作了網站的刪除或是其

他功能。


而合法網站誤認為,非法站台僅能透過 Form POST 方式傳送且資料也不是 json 格式,認為使用JSON

格式當作應該可以避免掉這類問題,殊不知 form 是可以傳送 json 文本的,以下模擬。


前後端溝通透過 json 格式,而後端若要更新或是刪除資料,Action肯定是要使用 POST或RESTful 風格

對應的動詞,這邊先看一下後端設計,透過 Request.Body 取得傳送過來的 json



看一下前端設計,注意 input 模擬的 json 的寫法,而form 的 enctype 目前是 text/plain,亦可改寫為

application/json


而後端接收到前端送來的 json 內容,如下方所示


完整的流程,網頁模擬使用者觸發(點選)註冊按鈕,後端接收到的前端來的 json 格式,並印出


上圖可看出,後端可以完整接收到前端資料,若此時後端都沒有做相對應的身份確認,直接拿了 id 

,就做了相關操作,就有可能造成系統危機。


建議防護措施,若是 asp.net mvc 可使用 AntiForgery 驗證合法呼叫,純 webapi 應該要使用 api key

以及 jwt,或是使用Double submit cookie 方式實作;另外,最終都要驗證該身份對應的權限


沒有留言:

張貼留言