https://avatars.githubusercontent.com/u/6058558

程式狂想筆記

Trust Boundary Violation 風險問題

以前我第一次看到弱掃工具跳出 Trust Boundary Violation,第一個反應其實是「我明明只是拿 request 參數查資料,怎麼也會被報」。後來回頭整理才發現,這類問題不是指程式一定已經被打穿,而是提醒我們不要把外部輸入直接當成可信任資料往下傳。 簡單來說,只要資料是從 HTTP request、Cookie、Header、Query String、檔案上傳、訊息佇列,甚至別的系統 API 回傳進來,都應該先視為不可信任。程式如果沒有做驗證、過濾或型別限制,就直接拿去查資料庫、拼接路徑、寫檔案或輸出到頁面,就很容易被弱掃工具標記。 什麼是 Trust Boundary Trust Boundary 可以理解成「資料從不可信任區域,跨進可信任程式邏輯的邊界」。 常見例子像這些: 使用者輸入的帳號、姓名、查詢條件。 前端送來的 JSON 欄位。 第三方系統 callback 回來的參數。 上傳檔案的檔名、MIME type、路徑。 這些值一旦直接進入核心流程,就可能衍生出 SQL Injection、XSS、Path Traversal、業務規則繞過,或至少讓弱掃無法確認這段程式是安全的。 為什麼弱掃會報 弱掃工具通常不是在判斷「你有沒有出事」,而是在判斷「資料流是否有明確被驗證」。 像下面這種寫法就很容易被標: 1 2 String userId = request.getParameter("userId"); userService.findUser(userId); 就算 findUser 內部最後是用 prepared statement,弱掃有時還是會認為這個值跨越 trust boundary 後沒有先被驗證,因此繼續往下標記。 實務上的修補方向 修這類問題時,我自己通常會先做三件事: 先限制型別,例如該是數字就轉成數字,該是 Enum 就轉成 Enum。 再限制格式,例如長度、字元白名單、是否允許空值。 最後才交給 service 或 repository 使用。 如果只是單純說「有做 filter」其實不太夠,因為真正重點是要讓資料在邊界進來時就被收斂成可控格式。 Java 範例 下面是比較容易讓人理解的作法,先把 request 參數驗證完再往下傳: 1 2 3 4 5 6 7 8 String rawUserId = request.

XSS 處理

前端XSS 問題很難處理,雖然可能有做htmlencode相關處理,但是程式還是會被判有風險。這邊整理一下那些做法。

尋找 spring boot 使用 sftp 方案

當時在找 Spring Boot 接 SFTP 的方案,本來以為直接找一個簡單 client 呼叫就好,結果真的查下去會發現至少有兩條路:一條是直接用底層 SFTP 函式庫,另一條是走 Spring Integration。這篇先把我整理過的思路補完整,之後再回頭看會比較知道當初為什麼選某套方案。

Vue-myAnimeList 產生我的動畫清單

完成品:我的新番清單

因為先前用 jQuery 寫出來版本不能跟朋友討論最近新番。連結在這:201507新番表

我想實作可以類似可以討論作品,就做出這個玩意。
小記這版特點

  1. 使用 Github Action 更新清單
  2. 右鍵可以做動畫排名(中圖想到功能)
  3. 這邊看到功能有兩大項,一個是本季月番,另一個是總月番顯示內容
    這個是我朋友開的 Issue,因為我朋友說不能跨季排名,這個非常不方便。這邊我原本煩惱要怎麼做比較好,原本想說多那個功能需要花七天時間,後來再想有沒有更好的做法,後來想到可以用模組化,大大減少我程式撰寫,花了三天時間完成(下班時間,一天大概2~3小時)。源碼:vue-myanimelist/MyAnimeList.vue at master · malagege/vue-myanimelist
  4. 可以用網址分享
  5. 可存檔功能,這也是我朋友開的 issue 。因為他覺得要紀錄網址太麻煩了。我原本也不太能確定有時間時作,因為要用這個特別做這個功能要額外花時間太麻煩了(身為上班族下班時間可是非常寶貴),我在想有沒有更簡單的作法。後來想到共用方法可以寫元件,想說值得嘗試。源碼vue-myanimelist/SettingManager.vue at master · malagege/vue-myanimelist

上面35真的讓我寫這個非常有成就,我覺得如何寫出共用元件可以讓下一個專案使用,減少我們後續製作程式的成本這個非常重要。
最後我其實是後端工程師,久久寫 Vue,不知道下次寫我還記得 Vue 有多少…

可改進:

  1. url 那一段載入很亂,因為有 bug 之下,寫到有點暈,所以就暴力寫出來了
  2. SettingManager 讀取有 bug ,因為要點兩下
  3. 當下同網頁貼別人網址無法載入清單