前言
我們有 ASPX WebForm 的程式被 Checkmarx 掃出有 Client_Side_Only_Validation Low Issue。
解法
Checkmarx 會這樣子認為是因為在 ASPX 中發現有使用 Validator ,
而在 Server 端的程式碼卻沒有先判斷 Page.IsValid 再處理程式的邏輯。
例如在 ASPX 中放入 RequiredFieldValidator 及 RangeValidator ,
然後按下 Button 它會先做 Client 驗證,如果沒有過的話,是不會 Postback 的,
所以在 網路 的 Tab 是看不到 Post 回 Server 的 Request 。
但如果我們將 Browser 的 Disable JavaScript 勾起來,
再按一次 Button ,這時 Client 的驗證就失效了,因為不會執行 JavaScript 。
所以就會直接 Postback。
所以為了怕這種狀況,需要在 Button 的 Event Handle Function 內,在執行邏輯之前,加入 Validate 才行,如下,
1 | protected void btnEncode_Click(object sender, EventArgs e) |
有時程式比較複雜時,Checkmarx 可能無法找到對應的 Codebehind 程式,所以暫時解的方式就是寫在 aspx ,如下,
1 | <script runat="server"> |
1 | <script runat="server"> |
註: 目前在 Checkmarx V9.4.5 HF16 的程式中,已不會去看 aspx 中是否有 server-side 程式碼,
所以寫在 aspx 的 Validate 還是會被掃出 Client_Side_Only_Validation 的 Issue,
所以請將 Page.Validate 相關驗證的程式碼寫到 .vb or .cs 之中