前言
透過 HttpClient 呼叫 api 時,透過 DefaultRequestHeaders.Authorization
設定 Token 的程式碼,
被 Checkmarx V9.4.5 HF16 掃出有 Privacy Violation 的 Issue。
為什麼這樣呢?
研究與解法
測試的程式碼如下,
1 | public class ParameterModel |
Checkmarx 的說明:
方法 CheckParameter 在 WebApplication1/WebApplication1/Controllers/WeatherForecastController.cs 第 89 行將
使用者個人資訊送至應用程式外。這可能構成侵犯隱私權(Privacy Violation)
Source: Authorization
Target: contents
1 | 92. httpClient.DefaultRequestHeaders.Authorization = new |
Checkmarx 是怎麼找的呢?
在 checkmarx 中會找一些個人資訊相關的欄位資訊,如下,
1 | CxList tempResult = All.FindByShortNames(new List<string> { |
而 httpClient.DefaultRequestHeaders.Authorization
中的 Authorization 符合 auth*
,
找到後,最後又呼叫 httpClient.PostAsync 取回資料,傳出 contents。
所以 Checkmarx 覺得有問題,因為它並不知道它是 api 所需要的 HTTP Header。
解法
有以下 2 種解決方式
1.在 Checkmarx 上,將該問題設定為 不可利用。
2.改使用 字串的方式(httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {data.Token}")
),如下,
1 | [ ] |